C++:Private和Protected的成员变量的区别

30人阅读 评论(0) 收藏 举报
分类:

1:在public的共有继承中

protected的变量在继承的子类中继承为protected的,子类的成员函数可以直接访问,在类外函数调用时,可以通过子类的对象可以访问;

protected的变量在继承的子类中继承为protected的,子类的成员函数可以直接访问,在类外函数调用时,不可以通过子类的对象可以访问;

2:实例

隐藏是指在继承过程中子类和父类存在同名函数的一种情况,他和重写很相似,但是是完全不同的两个概念。下面先对两个概念进行说明:

覆盖

重写翻译自override,也翻译成覆盖,是指派生类中存在重新定义的函数。其函数名,参数列表,返回值类型,所有都必须同基类中被重写的函数一致。只有函数体不同(花括号内),此时基类中被重写的函数必须有virtual修饰

隐藏:

隐藏:隐藏是指派生类的函数屏蔽了与其同名的基类函数。这里有两种情况
1>
子类函数名,参数列表,返回值类型与基类的完全一样,此时基类中被隐藏的函数不能有virtual修饰(否则就是重写)
2>
函数同名,但是参数列表不同,此时基类中被隐藏的函数有没有virtual修饰均可
请看如下例子

类定义如下:

  1. #include<iostream>  
  2. #include<functional>  
  3. #include<string>  
  4. using namespace std;  
  5. class Parent  
  6. {  
  7. public:   
  8.     Parent ()   
  9.     {  
  10.         cout<<"Parent () "<<endl;         
  11.     }  
  12.       
  13.     ~ Parent ()   
  14.     {  
  15.         cout<<"~Parent()"<<endl;  
  16.     }  
  17.     virtual void vDis()  
  18.     {  
  19.         cout<<"Parent::virtual void vDis()"<<endl;  
  20.     }     
  21.     void Dis()  
  22.     {  
  23.         cout<<"Parent::void Dis()"<<endl;  
  24.     }  
  25. };  
  26.   
  27. class Child:public Parent  
  28. {  
  29. public:  
  30.     Child()  
  31.     {  
  32.         cout<<"Child"<<endl;  
  33.     }     
  34.     ~Child()  
  35.     {  
  36.         cout<<"~Child"<<endl;  
  37.     }  
  38.     void vDis()  
  39.     {  
  40.         cout<<"Child::void vDis()"<<endl;  
  41.     }     
  42.     void vDis(string s)  
  43.     {  
  44.         cout<<"Child::void vDis(string s)"<<s<<endl;  
  45.     }     
  46.     void Dis()  
  47.     {  
  48.         cout<<"Child::void Dis()"<<endl;  
  49.     }  
  50. };  
考虑如下代码:
  1. int main()  
  2. {  
  3.     Child c;  
  4.     c.vDis();         //覆盖
  5.     c.vDis("TEST");   //隐藏
  6.     c.Parent::Dis()   //访问父类的函数
  7.     c.Dis();          //隐藏
  8.     return 0;  
  9. }  

结果输出如下:

Parent () 
Child
Child::void vDis()        //覆盖

Child::void vDis(string s)TEST  //隐藏

Parent::void Dis()

Child::void Dis()      //隐藏
~Child
~Parent()
查看评论

c++ public, protected, private成员变量,成员函数继承和访问规则实例代码

Base.h #ifndef _BASE_H_ #define _BASE_H_ namespace cplusplustest{ class Base { pub...
  • alex_xhl
  • alex_xhl
  • 2015-08-15 23:04:05
  • 1626

C++中public、protected、private的区别

第一: private,public,protected的访问范围:   private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问. protected...
  • scottly1
  • scottly1
  • 2014-04-23 11:33:49
  • 5280

访问控制符public ,private ,protected,private protected的区别!

访问控制符是一组限定类、域或方法是否可以被程序里的其他部分访问和调用的修饰符。具体地说,类及其属性和方法的访问控制符规定了程序的哪些其他部分可以访问和调用它们,哪些不可以。这里的其他部分是指程序里这个...
  • ybyb14
  • ybyb14
  • 2007-01-16 09:27:00
  • 3799

C++中关于public、protect、private的访问权限控制

一:成员的访问权限 1: public访问权限     一个类的public成员变量、成员函数,可以通过类的成员函数、类的实例变量进行访问        #include #include us...
  • ycf74514
  • ycf74514
  • 2015-10-11 21:29:33
  • 6427

深入理解C++中public、protected及private用法

深入理解C++中public、protected及private用法 投稿:shichen2014 字体:[增加 减小] 类型:转载 这篇文章主要介绍了C++中public、pro...
  • leolinsheng
  • leolinsheng
  • 2015-01-13 10:42:27
  • 6404

个人理解:什么情况下需要使用protected修饰类成员变量

在自己编写代码或者
  • njustzj001
  • njustzj001
  • 2014-10-11 18:30:35
  • 3491

作用域public,private,protected,以及不写时的区别

C++中和JAVA中,public、private、 protected 的用法不完全一样。 C++中: public修饰的成员变量或方法可以被任意其他的类访问。private修饰的成员变...
  • u013126379
  • u013126379
  • 2016-08-29 23:16:09
  • 6455

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

大学生涯,涉及到类的作用域,继承都是用的public 共有继承,当时也没想那么多,觉得共有继承多方便,多简单,反正没有太多的限制,不管是类的成员或者是基类的成员函数都可以访问。没有深究。其实这里面真是...
  • elfprincexu
  • elfprincexu
  • 2015-01-30 14:51:59
  • 1261

C++ 类关键字public、protected、private区别

C++,public、protected、private,简短总结: 1、public:类内、类的对象;派生类内、派生类对象--->>均可访问。 2、protected:类内、派生类内--->>可...
  • junlon2006
  • junlon2006
  • 2016-11-07 15:27:45
  • 749

public,private,protected的区别,继承方法与访问权限

第一部分: public/private/protected的具体区别 在说明这四个关键字之前,就class之间的关系做一个简单的定义,对于继承自己的class,base class可以认为他们都...
  • spu20134823091
  • spu20134823091
  • 2016-12-23 10:25:35
  • 961
    个人资料
    持之以恒
    等级:
    访问量: 12万+
    积分: 2380
    排名: 1万+
    最新评论