1) 例子:
class Item_base { pbluc: Item_base( const string &book=””, double sales_price = 0): isbn(book),price(sales_price){} virtual double net_price(size_t n) const{return n*price;} virtual ~Item_base(){} priate: string isbn; protected://可以由继承类访问,不许外界用户访问 double price; }; class Bulk_item:public Item_base { public: double net_price(size_t)const;//可以加上virtual ,声明必须和基类保持一致 private: size_t min_qty; double discount; };
//这里对于private和protected的理解解释一下 //下面这一段代码可以运行 //说明所谓私有或者保护,共有,这些概念都是在类层面上的,而不是对象层面上的 //即其他的类不可以访问本类的私有成员.但是本类,无论是哪个对象都可以访问本类的私有//成员, protected也是一样的 #include"stdio.h" class Foo{ private: int a; int b; public: Foo():a(1){} void fun(Foo &b) { this->b=b.a; printf("%d",b.a); } }; int main() { Foo d; Foo c; c.fun(d); return 0; }
2) 派生类对基类的protected成员一样没有访问权限
3) 引用和指针的静态类型和动态类型可以不同,这是C++多态的基石
4) 有的时候想不用多态的机制,可以使用如下方法
Item_base *basep=&derived;
double d = basep->Item_base::netprice(42);//强制使用Item_base中的netprice
5) 虚函数的默认实参最好保持一致
6) 继承与访问权限
摘自http://www.360doc.com/content/07/0517/16/27670_505311.shtml
对于一个父类(基类)
如果声明一个成员为private,就说明这个东东使我的,不能让其他人用,包括子孙。
如果是protected,我就会告诉我的子孙,你们要小心的用,但绝对不能让外人使用。
如果说是public,那就是说,这个东东大家随便用吧。
对于一个子类(从基类继承而来的),
private是一个吝啬的继承者,他将从祖辈继承下来的东西统统藏起来,不让别人碰触(包
括自己的子孙)。(当然他也只能使用祖辈授予其的权力,即只能使用祖辈中的protected
和public)。
protected是一个有保护意识的继承者,他将从祖辈继承下来的东西,只允许自己的子孙使
用(即使以前祖辈的东西是公众都可以使用的public)。
public是一个循规守据,他不关心祖辈的东西,原来是什么规矩就是什么
7) 友元与继承无关
8)整个继承层次中只有一个static