- 基本类型
- 整型
- 短整型(short int)整型(int)长整型(long)
- 单精度型(float)双精度型(double)长双精度型(long double)
- 指针类型(*)枚举类型(enum)数组类型([ ])结构体类型(struct)共用体类型(union)类类型(class)
- 构造函数是在对象定义时自动执行,为对象赋初值。析构函数是对象销毁时自动调用,做一些善后工作。构造函数的名字就是类名,析构函数的名字是波浪号加类名。构造函数和析构函数都不需要写函数的返回类型。对象可能有不同的构造方法,所以类可以有一组重载的构造函数,但析构函数只能有一个。构造函数还可以有一个初始化列表。
函数原型声明只是说明了该函数应该如何使用,函数调用时应该给它传递哪些数据,函数调用的结果又应该如何使用。函数定义除了给出函数的使用信息外,还需要给出了函数如何实现预期功能,即如何从输入得到输出的完整过程。
什么时候一定要定义复制构造函数?如果类的数据成员中含有指针,而指针指向的是一个动态变量,必须自己定义复制构造函数。或对复制构造有其他特殊的要求也需要定义复制构造函数
什么是抽象类?定义抽象类有什么意义?抽象类在使用上有什么限制?包含有纯虚函数的类称为抽象类。
定义抽象类的主要用途是规范从这个抽象类派生的这些类的行为。
在使用时,不能定义抽象类的对象,只能定义抽象类的指针。
ASCII文件是将存储在文件中的每个字节解释成一个ASCII字符,
二进制文件是将文件内容解释成一个二进制的比特流,由程序解释这些比特流的意义。
函数模板就是函数中的某个参数或返回值的类型是不确定的,是可变的,这些不确定的类型称为模板参数。
如果给函数模板的模板参数指定了一个具体的类型,就得到了一个可以执行的函数,这个函数称为模板函数。
函数模板可以节省程序员的工作量,若干个被处理的数据类型不同,但处理流程完全一样的函数可以写成一个函数模板。
函数模板实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就成为函数模板。
在函数体相同、函数的参数个数相同而类型不同时,函数模板比函数重载更方便,程序更简洁。
在什么情况下必须定义类自己的复制构造函数?如果类的数据成员中含有指针,而指针指向的是一个动态变量,必须自己定义复制构造函数。或对复制构造有其他特殊的要求也需要定义复制构造函数
链接
对于凡是包含动态分配成员或包含指针成员的类都应该提供拷贝构造函数
链接
当你的类需要深拷贝的时候,需要自定义复制构造函数,这样也可以防止一些意外的事情发生,而且一般来说最好自定义一个拷贝构造函数,并且实现深拷贝。因为程序自动生成的复制构造函数是浅拷贝,这样临时对象就会和原对象指向同一块内存,而当临时对象在作用域外被释放时,那么原对象的内存空间也就同时被释放了,之后再次引用原对象就会出问题,这是由于浅拷贝而造成的很普遍的一个问题。
将析构函数定义成虚函数可以防止内存泄漏。
链接
如果基类的析构函数不是虚析构函数,那么在销毁派生类对象时,只会调用基类的析构函数,派生类对象无法释放,导致内存泄漏。则定义基类的析构函数是虚析构函数,那么派生类的析构函数会自动成为虚函数,在销毁派生类对象时,会首先调用派生类的析构函数,再调用基类的派生函数,让父类对象和子类对象都完全释放。



