《深入理解C++对象模型》读书笔记(二)

1、         静态成员函数特点:1、不能够直接存取非静态成员变量(因为静态成员函数不含有this指针);2、不能够声明为const、volatile或virtual;3、不需要通过类对象调用。直接通过类名调用;4、地址类型就是普通的函数指针,其他非静态成员函数的地址需要用类成员函数指针来存储。

class base{ 

static int func1(); 

int func2(); 

}; 

int(*pf1)()=&base::func1;//普通的函数指针 

int(base::*pf2)()=&base::func2;//成员函数指针

const成员函数的特点:

1)const成员函数可以访问非const对象的非const数据成员、const数据成员,也可以访问const对象内的所有数据成员;

2)非const成员函数可以访问非const对象的非const数据成员、const数据成员,但不可以访问const对象的任意数据成员;

3)作为一种良好的编程风格,在声明一个成员函数时,若该成员函数并不对数据成员进行修改操作,应尽可能将该成员函数声明为const 成员函数。

4)只有被声明为const的成员函数才能被一个const类对象调用。

2、         静态成员变量只能在类外定义,避免不同的类对象实例化时对静态变量的改变。

3、         主流C++编译器中为了标识成员函数,通常将函数名和参数列表组合在一起,形成一个唯一的内部名称。

4、         虚函数访问调用:




5、         多重继承下,若n个基类均有虚函数,则派生类有n个虚函数表。将每个虚函数表以外部对象的形式产生,并给予独一无二的名称。

6、         函数调用效率:非成员函数与普通成员和静态成员函数,三者调用效率一直,而虚函数在单一继承、多重继承、虚拟继承中,效率会下降。效率最高的是内联函数。

7、         内联函数(inline)若被调用多次的情况下,可能产生大量的扩展码,若内联函数中存在局部变量,会产生临时性对象。

8、         纯虚函数:即函数无明确定义,参数列表后添加“=0”,含有纯虚函数的类叫做抽象类,不能被实例化。

9、         对于类中的常量,一般使用初始化列表来对其进行初始化,初始化的顺序仅与其声明的顺序相关。初始化列表有三个缺点:1、只有类成员变量是public,才可以使用;2、只能指定常量;3、由于编译器没有自动施行,可能有初始化失败的情形存在。

10、    

11、    

12、    

13、     每一个构造函数,需要等到起基类构造函数全部调用执行完毕后,才开始设定虚函数表指针,然后就可以调用正确的虚函数实体了。

14、    

15、    

16、     基类指针指向派生类对象的数组,若采用delete[] pBase删除对象,可能会产生错误,若派生类对象为空类则可能不报错。只有通过循环遍历指针数组,逐个删除对象,销毁内存中的数据。

    Base *pBase=new Child[3];

    for(int x=0;x<3;++x)

    {

           Child *p=&((Child*)pBase)[x];

           delete p;

        }

17、     对于一个template声明,在它被一组实际参数具现(就是确定参数类型)之前,只能施行有限的错误检查。Template中那些与语法无关的错误,编译器无法检测出来。

18、     模板成员函数只有在使用的时候才会具体化,此举是为了提高时间和空间的效率,避免具体化大量的函数后,确用得很少。

19、     typeid是C++的关键词, typeid是C++的关键字之一,等同于sizeof这类的操作符。typeid操作符的返回结果是名为type_info的标准库类型的对象的引用。相关详细介绍:http://www.cppblog.com/smagle/archive/2010/05/14/115286.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值