1.为什么只有~析构函数不论基类和派生类都用到了virtual关键字?
C++中基类采用virtual虚析构函数主要目的是为了防止潜在的内存泄漏。
具体地说,如果派生类中申请了内存空间,并在其析构函数中对这些内存空间进行释放。假设基类中采用的是非虚析构函数,当删除基类指针指向的派生类对象时就不会触发动态绑定,因而只会调用基类的析构函数,而不会调用派生类的析构函数。那么在这种情况下,派生类中申请的空间就得不到释放从而产生内存泄漏。所以,为了防止这种情况的发生,C++中基类的析构函数应采用virtual虚析构函数。
关于虚函数的笔记看第12点。
2.c++ inline使函数实现可以在头文件中,避免多重定义错误
inline最大的用处是: 非template 函数,成员或非成员 ,把定义放在头文件中,定义前不加inline ,如果头文件被多个translation unit(cpp文件)引用,ODR会报错multiple definition。
相关链接
3.this->
this 是 C++ 中的一个关键字,也是一个 const指针,它指向当前对象,通过它可以访问当前对象的所有成员。this 是一个指针,要用 ->
来访问成员变量或成员函数。
4.调用另一个cpp文件中函数(多个.cpp文件编译)
首先两个cpp文件都导入需要的函数声明所在的.h文件。
第一种方法是分别将两个cpp文件编译为.o文件,然后进行连接。
g++ -c main.cpp -o main.o
g++ -c fun.cpp -o fun.o
g++ main.o fun.o -o out
第二种方法是使用vscode编译器,在tasks.json中加入需要一起编译的文件
5.有空看看开源项目glog(谷歌日志系统)
6.类访问控制关键字public、protected、private的区别
1)private,public,protected的访问范围:
private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问.
protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问
public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问
注:友元函数包括两种:设为友元的全局函数,设为友元类中的成员函数
在不加声明时,类的成员默认为private成员。
|
类自己 |
类的实例化对象 |
类的派生类 |
public成员 |
yes |
yes |
yes |
protect成员 |
yes |
no |
yes |
private成员 |
yes |
no |
no |
2)类的继承后方法属性变化:
使用private继承,父类的所有方法在子类中变为private;
使用protected继承,父类的protected和public方法在子类中变为protected,private方法不变;
使用public继承,父类中的方法属性不发生改变;
public:可以被任意实体访问
protected:只允许子类及本类的成员函数访问
private:只允许本类的成员函数访问
在不加声明时,类的默认继承方式为private继承。
|
public继承 |
protect继承 |
private继承 |
父类的public成员 |
public |
protect |
private |
父类的protected成员 |
protect |
protect |
private |
父类的private成员 |
不可见 |
不可见 |
不可见 |
7.类的参数
使用类的时候进行实例,如果有参数会将参数传入类中定义的构造函数里,可以给成员变量赋值。
8.模板template
模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。
使用模板的目的就是能够让程序员编写与类型无关的代码。比如编写了一个交换两个整型int 类型的swap函数,这个函数就只能实现int 型,对 double ,字符这些类型无法实现,要实现这些类型的交换就要重新编写另一个swap函数。使用模板的目的就是要让这程序的实现与类型无关,比如一个swap模板函数,即可以实现int 型,又可以实现double型的交换。模板可以应用于函数和类。
注意:模板的声明或定义只能在全局,命名空间或类范围内进行。即不能在局部范围,函数内进行,比如不能在main函数中声明或定义一个模板。
9.冒号:的作用
9.1 单冒号(
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)