码迷,mamicode.com
首页 > 编程语言 > 详细

c++ public protected private 继承

时间:2014-07-11 10:31:08      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   cti   io   代码   

1:访问控制

1.1 public 这类型成员可以被类本身函数访问,也可以被外部创建的类对象调用。子类对象与子类内部可以访问

1.2 protected类型成员,只能被类本身函数访问。外部创建的类对象没有访问权限。子类对象没有访问权限,子类内部可以访问

1.3 private类型成员,只能被类本身函数访问,外部创建的类对象没有访问权限。子类对象和子类内部都没有访问权限

class TestObject{
public:
    void Function();
    void TestPublic();
protected:
    void TestProtected();
private:
    void TestPrivate();
};


void TestObject::Function(){
    TestPublic();
    TestProtected();
    TestPrivate();
}

int main(){
       TestObject obj;
       obj.TestPublic();//yes
       obj.TestProtected();//error
       obj.TestPrivate();//error
}

2:继承关系的访问控制

2.1 public继承。public继承使子类顺延父类的访问控制属性,即成员保持父类的控制属性,这样在子类中的成员访问控制同父类的一样

class Base
{
public:
    Base(void);
    ~Base(void);
    void TestPublic();
protected:
    void TestProtected();
private:
    void TestPrivate();
};


void Base::TestPublic(){
    cout<<"TestPublic"<<endl;
}

void Base::TestProtected(){
    cout<<"TestProtected"<<endl;
}

void Base::TestPrivate(){
    cout<<"TestPrivate"<<endl;
}

class Child :
    public Base
{
public:
  Child ();
};

Child ::Child (){
    child.TestPublic();//yes
    TestProtected();//yes
    TestPrivate();//error
}

int _tmain(int argc, _TCHAR* argv[])
{
    Child child;
    child.TestPublic();//yes
    //child.TestProtected();//error
    //child.TestPrivate();//error
    return 0;
}

2.2 protected继承,将父类public和protected属性的成员属性顺延到子类来后变成protected属性。protected属性是可以提供给子类在内部访问的。

如上代码,如果改为protected继承。则内部访问保持和public继承的不变,而在外部,由于父类public属性被更改为protected的属性,则在外部创建的子类对象没有了访问权限。

class Child :protectedBase{
}


Child ::Child (){
    child.TestPublic();//yes
    TestProtected();//yes
    TestPrivate();//error
}

int _tmain(int argc, _TCHAR* argv[])
{
    Child child;
    //child.TestPublic();//error
    //child.TestProtected();//error
    //child.TestPrivate();//error
    return 0;
}

2.3 private继承。这种继承方式中断了后续子类对当前类的父类的所有访问权限,在该种继承方式下,会将父类public和protected属性顺延成private属性。这样,几时后面子类再次继承,都没有了对当前父类的成员的访问权限。

class Child :privateBase{
}


Child ::Child (){
    child.TestPublic();//yes
    TestProtected();//yes
    TestPrivate();//error
}

class Mini :public Child{
   public:
       Mini();
}

Mini::Mini(){
    TestPublic();//error
    TestProtected();//error
    TestPrivate();//error

}

int _tmain(int argc, _TCHAR* argv[])
{
    Mini mini;
    //mini.TestPublic();//error
    //mini.TestProtected();//error
    //mini.TestPrivate();//error
    return 0;
}

 

c++ public protected private 继承,布布扣,bubuko.com

c++ public protected private 继承

标签:style   blog   color   cti   io   代码   

原文地址:http://www.cnblogs.com/zhidao-chen/p/3834155.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!