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

【C++基础】公有,私有和受保护的继承

2014-02-07 00:33 225 查看
对类所继承的成员的访问由基类中的成员访问级别和派生类派生列表中使用的访问标号共同控制。

派生类可以进一步限制但不能放松对所继承的成员的访问

public inheritance:基类成员保持自己的访问级别:基类的public成员为派生类的public成员,基类的protected成员为派生类的protected成员。
protected inheritance:基类的public和protected成员在派生类中为protected。
private inheritance:基类的所有成员在派生类中为private成员。

示例:

class Base
{
public:
void basemen();                // public member
protected:
int i;                         // protected member
// ...
};

struct Public_derived : public Base
{
int use_base() {return i;}     // ok; derived classes can access i
// ...
};

struct Private_derived : private Base
{
int use_base() {return i;}    // ok; derived classes can access i
};

Base b;
Public_derived d1;
Private_derived d2;
b.basemen();                     // ok;
d1.basemen();                    // ok; basemen is public in the derived class
d2.basemen();                    // error; basemen is private in the derived class

struct Derived_from_Private : public Private_derived
{
// error; Base::i is private in Private_derived
int use_base() {return i;}
};

struct Derived_from_Public : public Public_derived
{
// ok; Base::i remains protected in Public_derived
int use_base() {return i};
};


private inheritance:

private继承是实现继承,不是接口继承;
如果classes之间的继承关系是private,编译器不会自动将一个derived class对象转换为一个base class对象;
private继承并不意味着is-a关系;
private继承在软件设计层面上没有意义,其意义只及于软件实现层面;

class Base  {  };
class Derived : private Base {  };

void test(Base* rhs){}

Base b;
Derived d;

test(&b); // ok;
test(&d); // error;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: