分类 C++ Primer笔记 下的文章

静态联编
编译过程将函数调用解释为执行特定代码块
动态联编
在运行过程指定运行的代码块

虚函数工作原理
每个对象都包含一个隐藏成员来存放指向函数地址数组的指针,这种数组称为虚函数表,虚函数表中存储了为类对象进行声明的虚函数的地址。

使用虚函数的代价:
每个对象都增大,增大了量为存储地址的空间。
对于每个类,编译器都创建一个虚函数地址表。
对于每个函数调用,都需要执行一项额外的操作,即到表中查找地址。

虚函数跟类继承函数的区别
继承的话 是有两个版本一个是子类版本 一个是父类版本具体调用哪个则看当前类所代表的类型 如果是虚函数的话则当前类会只有一个版本就是当前的类 并且虚函数是必须得覆盖的

如果
2.75*a;
这种的话就算在a类里面重载了运算符*号的话也不会执行重载运算符
解决这种方案就是定义一个非成员的重载函数

Time operator*(double m,const Time & t);
这种方式的重载函数是无法更改类里面的私有函数的 可以使用友元方式来解决
friend operator*(double m,const Time & t);

重载运算符 只能选择非成员重载方式或者成员重载方式其一。

如果类的构造函数是
Stonewt::Stonewt(double lbs)
{
....
}

那么可以采用
Stonewt myCat;
myCat = 19.6;

如果要将myCat转化为double则要重定义转换函数格式是:

operator typeName();

C++类的默认访问控制权限是private
C++类中 每个实例的类的代码段是一样的,但是每个实例的数据段是不一致的。

常见的给c++成员命名前缀为:m_ 或者后缀带_ 这样可以区分参数与成员

给对象数组批量初始化可以使用以下:

Stock stocks[4]={
Stock("NanoSmart",12.5,20),
Stock("Boffo Objects",200,2.0),
Stock("Monolithic Obelisks",130,3.25),
Stock("Fleep Enterprises",60,6.5)
};

初始化对象数组的实现原理是用默认构造函数创建数组元素,然后花括号中的构造函数将创建临时对象,然后将临时对象的内容复制到相应的元素中。

作用域内枚举c++11
enum egg {Small,Medium,Large,Jumbo};
enum t_shirt{Small,Medium,Large,Xlarge}; //这种形式是会报错的因为两个类型里面的元素冲突
c++11提供了如下方法:
enum class egg {Small,Medium,Large,Jumbo};
enum class t_shirt{Small,Medium,Large,Xlarge};