模板的实参只有在某些时候可以省略,如虚拟类型参数对应的模板实参。
类模板和模板类不是同一个东西,这里贴出来类模板的介绍:https://blog.csdn.net/low5252/article/details/94654468
生动的比喻:模板类是类模板实例化后的一个产物,说个具体点的例子吧,我们把类模板比作是一个做饼干的模子,而模板类就是用这个模子做出来的饼干,至于这个饼干是什么味道的就要看你自己在实例化时用的是什么材料了,你可以做巧克力饼干,也可以做牛奶饼干,这些饼干出了材料不一样外,其它的东西都是一样的了。
模板的参数不需要一定是类型。
is a关系表示的是inheritance,has a关系表示的是composition
拷贝构造函数要call by reference, 不然会陷入无限循环。
析构函数不能有default参数!!!
在选择重载函数时不看函数的返回值!!!
static相当于全局变量,不在原本那个东西中要内存
抽象类一定要有一个纯虚函数!
The C++ programing language makes use of virtual base classes to resolve the ambiguous references to data members in a derived class, and ensure the derived class keeping a solely copy of members from repeatedly inherited ancestors.
!不能说class是一系列元素的集合!
不一定每一个class都有default constructor
构造引用并不会调用默认构造函数
只有出现像Class A(10000)和Class a=10000时,才会把赋值构造函数调用出来。反而,直接给指针分配内存不会。
拷贝构造函数在传值的时候不会被调用,但是在按引用传递,或者是拷贝构造,或者是直接相等的时候才可以调用。
constant function 的argument不一定都是要常数。
literal,function returned results,和匿名对象都是常数。
常量对象仅可以调用常量成员函数,保证常量对象的数据成员不受改变。
常成员变量:一经初始化就不可以改变,构造函数对其进行初始化,仅可以通过初始化列表来进行操作。通常把常数据成员定义为类静态成员,使其成为类的一个常量。
常成员函数只能调用常成员函数,修饰的this指针指向的内存空间不可改变。
常量对象不能传递给一个变量的引用。
指针不能直接接上默认构造函数。
虚函数并不一定会动态绑定。
地址和引用的类型可以是抽象类,但是对象的类型不能是一个抽象类。
当没有定义时,默认构造函数并不会被构建,但是拷贝构造函数,析构函数和赋值符号会被自动创建。
为了把数据写进文件,必要的是知道数据的格式。
类的实例并不能作为类的成员,但是类的指针,类的引用都可以。
To realize polymorphism, the following two elements are necessary: Virtual function and function invocation via a pointer/reference of base class.
A virtual function is function without implementation(x)
A virtual function in a base class must be defined, even though it may not be used.(√)
new 返回的是申请的类型的一个指针。
exception can be a variable designed by user.
纯虚函数定义:不能对虚函数给出有意义的实现
函数对象:实现了operator()
派生类只能访问基类的public成员和protected成员
派生类的析构函数可以调用基类的析构函数
指针常量和常量指针的区别。(具体可以见https://blog.csdn.net/weibo_dm/article/details/80445205)
指针常量:是一个常量,但是它是由指针来修饰的。
int * const p //指针常量 int a,b; int * const p=&a //指针常量 //那么分为一下两种操作 *p=9;//操作成功 p=&b;//操作错误
因为声明了指针常量,说明指针变量不允许修改。如同次指针指向一个地址该地址不能被修改,但是该地址里的内容可以被修改。
常量指针:如果在定义指针变量的时候,数据类型前用const修饰,被定义的指针变量就是指向常量的指针变量,指向常量的指针变量称为常量指针。
const int *p = &a; //常量指针 int a,b; const int *p=&a //常量指针 //那么分为一下两种操作 *p=9;//操作错误 p=&b;//操作成功
因为常量指针本质是指针,并且这个指针是一个指向常量的指针,指针指向的变量的值不可通过该指针修改,但是指针指向的值可以改变。
指向常量的指针常量如下:
onst int * const b = &a;//指向常量的指针常量
static关键字两个作用: