c++primer plus阅读笔记(六)
来源:互联网 发布:win7 内存优化 编辑:程序博客网 时间:2024/05/21 18:35
c++自动提供的成员函数
默认构造函数,如果没有定义构造函数默认析构函数,如果没有定义拷贝构造函数。如果没有定义赋值运算符,如果没有定义地址运算符,如果没有定义。
什么时候调用拷贝构造函数
Time time_ob_2(time_ob_1);Time time_ob_2 = time_ob_1;Time time_ob_2 = Time(time_ob_1);Time *time_ob_2 = new Time(time_ob_1);其中要特别注意第二种并非是重载了等号运算符,在声明类的时使用等号赋值方法会被编译器直接优化成第一种方式,试验中所有都被优化成第一种形式。
c++11空指针
char * str=nullptr;//c++11 null pointer notation
直接调用构造函数
直接调用构造函数会产生一个临时对象,生命期为当前语句。
继承构造顺序
首先创建基类对象,调用基类的构造函数;析构的时候与构造相反,先调用派生类的析构函数,然后自动调用积累的析构函数。
派生类和基类
基类指针和引用都可以不通过显示类型转换指向派生类,但是只能调用基类的方法。但是派生类的指针和引用无法隐式转换到基类,因为转化成功后,该指针无法调用派生类的成员。
虚函数
虽然基类的指针(引用)对派生类的兼容性,但无法调用派生类的成员,如:Cycle a;Motocycle b;cycle *ptr=&b;b->fn(); //use Cycle::fn();---------------------------------------------------------如果将fn()定义成虚函数class Cycle{...virtual void fn();...}b->fn(); //use Motocycle::fn()---------------------------------------------------------1.只要基类声明某个函数,子孙类中类型完全相同的函数也为虚函数(也可以显示声明)。
虚函数表
1.编译器为每一个对象添加一个隐藏成员,隐藏成员保存了一个指向当前对象的虚函数地址数组的指针2.执行的时候通过判断当前指针所指向的对象的类型从而决定使用哪个虚函数表。
虚函数注意事项
1.派生类不继承,所以讲构造函数声明为虚没有意义,构造函数不能够是虚拟函数2.析构函数应当是虚函数,因为Father *ptr=new Son;...delete ptr;3.虚函数是从当前指针(引用)对象开始找fn(),如果找不到则会向上(基类)寻找。4.派生类通过参数对函数(虚函数)进行重载后,会将基类同名函数隐藏,但是这对于兼容性的基类指针(引用)来说没有影响,因为虚函数表和执行方式没有发生改变。class Father{...void fn();...};class Son{...void fn(int a);...};Father fa;fa.fn(); //invalidFather *ptr=new Son;ptr->fn(); //valid
纯虚函数
虚函数原型后面加上"=0"表示纯虚函数,作用是提供接口给派生类实现,有纯虚函数的为抽象类,不能实例化virtual void fn()=0;
阅读全文
0 0
- c++primer plus阅读笔记(六)
- 《C Primer Plus》阅读笔记(4)
- 《C Primer Plus》阅读笔记(3)
- 《C Primer Plus》阅读笔记(2)
- 《C Primer Plus》开头阅读笔记
- C++primer plus阅读笔记第四章
- c++primer plus阅读笔记(一)
- c++primer plus阅读笔记(二)
- c++primer plus阅读笔记(四)
- c++primer plus阅读笔记(五)
- c++primer plus阅读笔记(七)
- c++primer plus阅读笔记(八)
- c++primer plus阅读笔记(九)
- c++primer plus阅读笔记(十)
- 《C++Primer Plus》学习笔记(六)
- C Primer Plus - 笔记
- c primer plus笔记
- c primer plus 笔记
- 从学习SaaS引申学习的一些关键词概念
- NIO服务端
- 验证用户名和密码是否为空的两种方式
- 阻止a链接href跳转的两种方式
- 例7.16 命名空间的使用举例
- c++primer plus阅读笔记(六)
- 使用Python进行DNS查询
- SD
- 《C++ Concurrency in Action》笔记1 join和detach
- 数据库双重负载均衡读写分离及双活集群
- onCreate中的savedInstanceState
- Android Studio 鼠标悬停文档显示fetching documentation的问题
- Android Bug
- JS设计模式(一)