首页 > 心得笔记 > 【笔记迁移】C++Primer笔记 2010/9/11

【笔记迁移】C++Primer笔记 2010/9/11

2012年2月26日  1,975 views 发表评论 阅读评论

15章 面向对象编程


引用和指针的静态类型(在编译时可知的引用类型或指针类型)与动态类型(指针或引用所绑定的对象的类型,这是仅在运行时可知的)可以不同,这是C++用以支持多态性的基石。


使用作用域限定符可以覆盖虚函数机制并强制函数调用使用虚函数的特定版本。
示例:

Item_base *baseP = &child;
double d = baseP ->Item_base::net_price(42);

这段代码将强制调用Item_base中定义的net_price版本,不会随baseP指针实际指向的对象而变化。
派生类虚函数调用基类版本时,必须显式使用作用于限定符。如果派生类函数忽略了这样做,则函数调用会在运行时确定并且将会是一个自身调用,从而导致无穷递归。
虚函数


虚函数的默认实参的值由调用该函数的类型定义,与对象的动态类型无关。 在同一虚函数的基类版本和派生类版本中使用不同的默认实参几乎一定会引起麻烦。如果通过基类的引用或指针调用虚函数,但实际执行的是派生类中定义的版本(引用或指针所指对象实际为派生类对象),这时就可能会出现问题,此时,为虚函数的基类版本定义的默认实参将传递给派生类定义的版本,
而派生类版本是用不同的默认实参定义的。

虚函数, 默认实参


所有的基类与派生类的关系应该遵循 派生类应反映与基类的“是一种(is a)”关系。
继承


派生类可以恢复继承成员的访问级别。例如类A private实现继承类B,类B中有Public成员size,那么,在类A的public部分中增加using声明即可。
示例:

class A :private B{
public:
using B::size;
}

派生类可以恢复继承成员的访问级别,但是不能使访问级别比基类中原来指定的更严格或更宽松。
使用class保留字派生时默认具有private继承,使用struct时默认具有public继承,但是使用默认继承是非常罕见的,不论何时都应显式指明继承的派生保护级别。
继承, 访问级别


继承与静态成员:如果基类定义了static成员,则整个继承层次中只有这一个这样的成员。无论从基类派生出了多少个派生类,所有这些类在访问static成员时所访问的是同一个成员。
继承, static


基类与派生类的转换:派生类可以转换为基类但仅仅局限于引用与指针还有用派生类对象对基类对象进行初始化,初始化时派生类的自有部分被忽略。
从基类到派生类没有自动的转换,就算是基类的指针指向派生类对象,当用这个指针给派生类指针赋值时也会出现编译错误,因为编译器无法只掉动态的绑定是否安全,只能通过静态类型来盘判断操作是否安全,如果此操作真的安全,那么可以使用static_cast强制编译器进行转换,或者使用dynamic_cast申请在运行时检查。

继承, 转换




声明:未作说明,则本文为代码至上原创。转载务必注明出处
注意:转载须保留全文,如需修改请 联系作者
本文永久地址:http://codeup.org/archives/473


我要分享到:

新浪微博 腾讯微博 人人 Twitter Facebook 网易微博 鲜果 Follow5
分类: 心得笔记 标签: , , ,