第十五章 面向对象编程(一)

    技术2024-10-17  59

     

    15.2 定义基类和派生类

    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

     

    最新回复(0)