c++ public protected private 继承

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

时间: 2024-10-29 19:09:37

c++ public protected private 继承的相关文章

7,C++ public, protected, private 继承的区别

在某处看到一张图,简单明了的说明了三者的关系,很是佩服,遂记录下来. //公有继承 对象访问 成员访问 public --> public Y Y protected --> protected N Y private --> private N N //保护继承 对象访问 成员访问 public --> protected N Y protected --> protected N Y private --> protected N N //私有继承 对象访问 成员访

14 PHP 类的继承 [public protected private] parent 构造方法 析构方法 重写 最终类和方法 设计模式

类的继承 简单理解: 某个类A具有某些特征,另一个类B,也具有A类的所有特征,并且还可能具有自己的更多的一些特征,此时,我们就可以实现:B类使用A的特征信息并继续添加自己的一些特有特征信息. 基本概念 继承:一个类从另一个已有的类获得其特性,称为继承. 派生:从一个已有的类产生一个新的类,称为派生. 继承和派生,其实只是从不同的方向(角度)来表述,本质上就是一个事情. 父类/子类:已有类为父类,新建类为子类.父类也叫"基类",子类也叫"派生类" 单继承:一个类只能从

C++:继承访问属性(public/protected/private)

? 公有继承(public) 公有继承在C++中是最常用的一种继承方式,我们先来看一个示例: 1 #include<iostream> 2 using namespace std; 3 class Father{ 4 public: 5 Father()=default; 6 void Father_show1(){ 7 cout<<"调用Father类的public方法:Father_show1"<<endl; 8 } 9 protected: 1

【转】C++易混知识点5:实例讲解Public Protected Private作用域,继承的区别和用意

大学生涯,涉及到类的作用域,继承都是用的public 共有继承,当时也没想那么多,觉得共有继承多方便,多简单,反正没有太多的限制,不管是类的成员或者是基类的成员函数都可以访问.没有深究.其实这里面真是涉及到了C++面向对象设计当中的封装特性.只暴露那些需要的成员和成员函数,不必过多曝露所有的成员. 转载请注明出处:http://blog.csdn.net/elfprincexu 第一:private.public.protected访问的范围. private:只能由1.该类中的函数:2.其友元

JAVA修饰符类型(public,protected,private,friendly)

JAVA修饰符类型(public,protected,private,friendly) public的类.类属变量及方法,包内及包外的不论什么类均能够訪问:protected的类.类属变量及方法,包内的不论什么类,及包外的那些继承了此类的子类才干訪问:private的类.类属变量及方法,包内包外的不论什么类均不能訪问:假设一个类.类属变量及方法不以这三种修饰符来修饰,它就是friendly类型的,那么包内的不论什么类都能够訪问它,而包外的不论什么类都不能訪问它(包含包外继承了此类的子类),因此

C++中public,protected,private访问

总结:1. protected和private的区别在于 ,protected的访问标号限制,能够被派生类的成员函数访问,而private不能2. protected和publice的区别在于,protected的访问限制,使其不能被基类的对象访问. -----------------------------------------------------第一:private, public, protected 访问标号的访问范围.private:只能由1.该类中的函数.2.其友元函数访问.不

C++类访问控制--public,protected,private的使用(未完)

参考代码 #include<iostream> #include<cstdio> using namespace std; class father { int id; protected: int tt; public: father():id(3){} void print() {printf("this is father public function %d\n",id);} void changeId() { id=10; printf("改

[学习笔记]Java的访问指示符public,protected,private,缺省的作用域

0.引言 Java的访问指示符public,protected,private,缺省可以用来修饰类和方法. 1.作用域如下 public: 其它类都能访问此类或方法 protected: 为继承而生的,子类可以访问父类该修饰的方法 private: 为类自己所用,一般修饰成员变量 缺省: 同一个包内可用("友好"类) 2.同一个java文件里面若有多个类 (1) 每个编译单元(文件)都只能有一个public 类.每个编译单元有一个公共接口的概念是由那个公共类表达出来的.根据自己的需要,

public, protected, private,internal,protected internal的区别

虽然这个知识比较简单, 但是老是会忘, 写上来, 增强记忆. 在C#语言中,共有五种访问修饰符:public.private.protected.internal.protected internal.作用范围如下表: 访问修饰符 说明public 公有访问.不受任何限制.private 私有访问.只限于本类成员访问,子类,实例都不能访问.protected 保护访问.只限于本类和子类访问,实例不能访问.internal 内部访问.只限于本项目内访问,其他不能访问.protected inter