C++ 学习笔记

1. 成员函数, 虚函数, 纯虚函数 的区别
class A
{
public:
void fun1();
virtual void fun2();
virtual void fun3() = 0;
}
calss B : A
{
public:
void fun1();
void fun2();
void fun3();
}
int main(void)
{
B b;
b.fun1(); // call fun1 in class A
b.fun2(); // call fun2 in calss B, B::fun2 override A::fun2
b.fun3(); // call fun3 in calss B, A::fun3 is a interface
return 0;
}
2. 如果在局部定义一个对象,则这个对象在这个局部函数结束时自动删除。如果是new一个对象,则不管函数运行到哪里,
这个对象一直存在,除非手动delete。
如果在局部定义一对对象,并放入容器,则容器是复制这个对象进去。局部结束后,这个对象的副本仍然在。
注意:每一个类的析构函数,一定要注意把这个类里所有的new都delete,要小心那些new后放进容器的。容易忽略。
3. C++在一个类的头文件的前半部分(类的定义体前)声明其他类的作用?
4. 类似于using Node::addChild;的作用? 
5. 如何将依赖的项目生成静态链接库,这样就不用每次都链接都那么慢了?
6. 上面一步,假设已经生成静态库,这个时候就不能改变静态库里的东西,为了能改变,如何换回以前的?
7. Overload  重载
在C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,但参数不同(包括类型、顺序不同),即函数重载。
(1)相同的范围(在同一个类中);
(2)函数名字相同;
(3)参数不同;
请注意,重载解析中不考虑返回类型,而且在不同的作用域里声明的函数也不算是重载。
Override    覆盖
是指派生类函数覆盖基类函数,特征是:
(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有virtual 关键字。
Overwrite:重写
是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)
8. 如果要实现覆盖父类函数,则父类函数必须要有virtual关键字,否则就算子类覆盖了父类函数,调用时仍然调用父类。最后的就是子类在覆盖父类函数时加上override,增强可读性。
原文地址:https://www.cnblogs.com/jeason1997/p/4795479.html