您的位置:首页 > 编程语言 > C语言/C++

《C++primer》读书笔记三

2016-04-19 17:10 295 查看
第十五章:面向对象编程
三个基本概念:数据抽象,继承,动态绑定。在C++中,用累进性数据抽象,用类派生从一个类继承另一个类,派生类继承基类的成员。动态绑定使编译器能够在运行时决定是使用基类中定义的函数还是派生类中定义的函数。

面向对象编程的关键思想是:多态性
1.继承:派生类,基类。
2.动态绑定:通过动态绑定,我们能够编写程序使用继承层次中任意类型的对象,无需关心对象的具体类型。

在C++章,通过基类的引用(或指针)调用虚函数时,发生动态绑定,引用(或指针)既可以指向基类对象也可以指向派生类对象,这一事实是动态绑定的关键,用引用(或指针)调用的虚函数在运行时确定,被调用的函数是引用(或指针)所指对象的实际类型所定义的。

基类通常应将派生类需要重定义的任意函数定义为虚函数。

protected成员:
可以认为protected访问标号是private和public的混合
1.像private成员一样,protected成员不能被类的用户访问。
2.像public成员一样,protected成员可被该类的派生类访问。



派生类中虚函数的声明必须与基类中的定义方式完全匹配,但有一个例外,返回对基类型的引用(或指针)的虚函数。派生类中的虚函数可以返回基类函数所返回类型的派生类的引用(或指针)、
一旦函数在基类中声明为虚函数,他就一直为虚函数,派生类无法改变函数为下滑是农户这一事实,派生类重定义选还是农户时,可以使用virtual保留字,但不是必须这样。
15.2.4 virtual与其他成员函数
C++中的函数调用使用默认不使用动态绑定。
动态绑定的两个条件:
1虚函数的成员函数才能进行动态绑定,成员函数默认为非虚函数,非虚函数不进行动态绑定。
2.必须通过基类的指针或引用机型函数调用

1.从派生类到基类的转换。
基类类型的引用绑定到派生类中或基类类型的指针指向派生类对象。
无论实际对象具有那种类型,编译器都将它当做基类类型对象,将派生类对象当做基类对象是安全的,因为每个派生类对象都拥有基类子对象。二期,派生类继承基类的操作,即任何可以在基类对象上执行的操作也可以通过派生类对象使用。

基类类型引用和指针的关键点在于静态类型(static type,在编译时可知的引用类型或指针类型)和动态类型(dynamic type,指针或引用所绑定的对象的类型,这是仅在运行时可知的) 可能不同。
2.可以在运行时确定virtual函数的调用。
对象的实际类型可能不同于该对象引用或指针的静态类型,这是C++中动态绑定的关键。

C++中的多态性:引用和指针的静态类型和动态类型可以不同,这是C++用以支持多态性的基石,通过极乐引用或指针调用基类中定义的函数时,我们并不知道执行函数的对象的确切类型,执行函数的对象可能是基类类型的,也可能是派生类类型的。
如果调用非虚函数,则无论实际对象是什么类型,都执行基类类型所定义的函数。如果调用虚函数,则直到运行时才能确定要调用那个函数,运行的虚函数是引用多绑定的或指针所指向的的对象所属类型定义的版本。

虚函数与默认实参:
1.虚函数也有默认实参
2.通过基类指针或引用调用虚函数时,默认实参为在基类虚函数声明中的值
3.通过派生类的指针或引用调用虚函数,默认实参是在派生类中的声明的值

友元关系与继承:友元关系不能继承,基类的友元对派生类的成员没有特殊访问权限,如果基类被授予友元关系,则只有基类具有特殊访问权限,该基类的派生类不能访问授予友元关系的类。

继承与静态成员:整个类中只有一个一个static实例(同样遵循访问限制)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: