继承

publicprotectedprivate继承

在C++中继承主要有三种关系:public、protected和private。这三种继承关系中public继承是最为常用的一种继承关系,private继承是最少见的继承关系。

1. public

public继承是一种接口继承,根据面向对象中的关系而言就是,派生类可以代替基类完成基类接口所声明的行为.

从语法角度上来说,public继承会保留基类中成员(包括函数和变量等)的可见性不变,也就是说,基类的public成员为派生类的public成员,基类的protected成员为派生类的protected成员

2. protected

从语义角度上来说,protected继承是一种实现继承

从语法角度上来说,protected继承会将基类中的public可见性的成员修改成为protected可见性,相当于在派生类中引入了protected成员,这样一来在派生类中同样还是可以调用基类的protected和public成员,派生类的派生类就也可以调用被protected继承的基类的protected和public成员。

例如:

class CSample1 {

protected:

    void printProtected() {}

public:

void printPublic() {}

};

class CSample2 : protected CSample1 {};

class CSample3 : public CSample2 {

   void print3() {

      printProtected();

      printPublic();

}

};

1.   

3. private

从语义角度上来说,private继承是一种实现继承,private继承会将基类中的publicprotected可见性的成员修改成为private可见性,这样一来虽然派生类中同样还是可以调用基类的protected和public成员,但是在派生类的派生类就不可以再调用被private继承的基类的成员了。

class CSample1 {
protected:
  void printProtected() {}
public:
  void printPublic() {}
};
class CSample2 : private CSample1 {};
class CSample3 : public CSample2 {
  void print3() {
    printProtected(); // 编译错误,不可以调用该函数
    printPublic();    // 编译错误,不可以调用该函数
  }
};

4. using声明

如果进行private或protected继承,则基类成员的访问级别在派生类中比在基类中更受限:

class Base{

public:

    std::size_t size() const {return n;}

protected:

    std::size_t n;

}

 

class Derived : private Base{...};

在这一继承层次中,size在Base中为public,但在Derived中为private。为了使size在Derived中成为public,可以在Derived的public部分增加一个using声明。如下这样改变Derived的定义,可以使size成员能够被用户访问,并使n能够被从Derived派生的类访问:

class Derived : private Base{

public:

    using Base::size;

privated:

    using Base::n;

    //...

 

}

posted @ 2011-08-11 15:35  银翼的魔术师  阅读(170)  评论(0编辑  收藏  举报