在啃了几十页 《 C++ Primer 》 之后,决定对 C++ 的基本语法和运用写一个小实验,编译环境是我的 Red Hat 5 Linux虚拟机。

Helloworld

下面是hello.cpp源代码

1
2
3
4
5
6
7
/***hello.cpp***/
#include <iostream>

int main(int argc, char *argv[]){
std::cout << "Hello World!" << std::endl;
return 0;
}

单源文件的编译和运行

编译

Linux环境下,我们使用 g++ 编译器将后缀为 .cpp的源文件编译成为可执行文件。

1
g++ hello.cpp

其过程与 C文件编译过程类似,首先把源文件编译生成对象文件,接下来是链接对象文件与相关库文件,最后得到可执行文件,默认情况下在源文件目录下生成,名为 a.out

运行

通过如下格式的命令运行该可执行文件

1
./a.out

当然我们可以通过在命令中增加选项来指定生成的可执行文件的名称,例如指定为hello,如下:

1
g++ hello.cpp -o hello

多源文件的编译和运行

类(class)

很多时候为了程序的易于理解和方便修改,我们都把一个工程拆分成若干个模块,每个模块是一个单独的源文件,负责某一项功能,且各模块间能够互相调用。在 C++ 中,我们就能够在单独的文件中定义一个 类(class),要完成这个工作,首先需要在头文件里声明该类,声明类的属性和方法,接着还需要在同名的 .cpp 文件内作定义。有了定义的类,只需要在其它源文件 #include 对应头文件,就可以在其他程序源文件中实体化该类得到一个对象,通过该对象就可以访问类的属性和方法。

源程序

这是一个实现两数相加的简单程序,在cal.h中定义了Cal类,且定义了一个add方法,打印两数相加和。

cal.h

1
2
3
4
5
6
7
/***cal.h***/
#include <iostream>

calss Cal{
public:
void add(double a, double b);
}; //此处的 ; 需特别注意

cal.cpp

1
2
3
4
5
6
/***cal.cpp***/
#include "cal.h"

void Cal::add(double a, double b){
std::cout << "a + b = " << a + b << std::endl;
}

main.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/***main.cpp***/
#include "cal.h"

int main(int argc, char *argv[]){
Cal cal1;
double a, b;
char repeat = 'y';

while(repeat != 'N' && repeat != 'n'){
std::cout << "Enter two numbers a&b : " << std::endl;
std::cin >> a >> b;
cal1.add(a, b);

std::cout << "Continue ?(y/n):" << std::endl;
std::cin >> repeat;
}
return 0;
}

编译

如果在 g++ 命令中指定多个的源文件,它们将被编译成一个可执行文件,如上例:

1
g++ cal.cpp main.cpp -o main

那么上述的两个源文件都被编译成main可执行文件,其中头文件已经声明,不用在命令中加上头文件。


C++ 里很重要的内容,将在后续继续学习。。






  • end