首页 > 代码库 > C++调试

C++调试

C+ +语言支持“分别编译”(separate compilation)。也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里。cpp文件里的东西都是相对独立的,在编译(compile)时不需要与其他文件互通,只需要在编译成目标文件后再与其他的目标文件做一次链接(link)就行了。

应该记住的一点就是,.h头文件中,只能存在变量或者函数的声明, 而不要放定义。即,只能在头文件中写形如:extern int a;和void f();的句子。这些才是声明。如果写上int a;或者void f() {}这样的句子,那么一旦这个头文件被两个或两个以上的.cpp文件包含的话,编译器会立马报错。

 

复习一些c++编程内容

数据的封装:面向对象的指导思想就是以对象为中心,就是要以谁做什么来表达程序的逻辑,要将数据的操作都转化为成员函数的调用。 也就是说,对象在程序中的所有操作,都通过调用自己的函数来完成。

数据封装的好处:可以对传入的参数加入条件限制。也可以限制某些数据只读不写。

内联函数:利用关键字inline定义,在编译时,直接将函数体代码和实参代替函数调用语句。类似于直接插入脚本。(结构和逻辑都时比较简单的)

类内定义:在定义一个类的时候,如果将成员函数的函数体,写在类的内部,这样就称为类内定义。(类内定义的成员函数,编译器会优先将其编译成内联函数)

类外定义:成员函数的函数体,写在类的外面。分别为同文件类外定义(成员函数虽然定义在类的外面,但和类的定义在同一个文件当中)和分文件类外定义(大型项目和专业程序员都会采用这种定义方式)。在头文件中,定义了类并且声明类的成员函数,在分文件当中定义类的成员函数。必须将头文件包含入分文件中。

 

内存分区:

栈区:所定义的变量就存储在栈区。其特点是内存又系统来进行控制,无论是分配还是回收,都不需要程序员来关心。

堆区:是用new来分配的内存,这是需要程序员自己来回收的。

全局区:用来存储全局变量和静态变量。

常量区:存储一些字符串和常量。

代码区:存储编译之后的代码。

 

对象的初始化:分为两种(1)有且仅有一次的初始化(2)根据条件初始化

构造函数:用来初始化。将初始化代码写在构造函数内,就可以起到初始化的作用,构造函数在对象实例化时被自动调用(被调用,且仅被调用一次)。初始化函数要与类同名,且构造函数没有返回值,不用写void。在实例化对象时,不需要传递参数的构造函数称为默认构造函数。

初始化列表:在构造函数中是用,例如

clas Student 
{
public:
    Student():m_strName("Jim"),m_iAge(10){}
private:
    string m_strName;
    int m_iAge;
};

初始化列表特性:(1)初始化列表先于构造函数执行(2)初始化列表只能用于构造函数(3)初始化列表可以同时初始化多个数据成员。

初始化列表的必要性:比如某一个const常量,如何去给其赋值呢,就需要用到初始化列表了。 

拷贝构造函数:通过同类型的对象实例化另外的对象时,自动调用拷贝构造函数。当没有自定义拷贝构造函数的时候,系统会自动生成一个拷贝构造函数。

析构函数:用于归还系统资源,收拾最后的残局。释放掉所占用的内存。析构函数不允许传递参数,也就不允许重载。

析构函数:如果没有自定义析构函数,则系统自动生成一个析构函数。在对象销毁时自动调用。

 头文件中尖括号<>和双引号“”的区别:

<>尖括号是从默认库中搜索;而“”双引号是从当前文件目录下搜素。

 

C++调试