BigCowPeking

实践是检验真理的唯一标准

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

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()
阅读更多
版权声明:本文为博主原创文章,转载请注明出处,谢谢。 https://blog.csdn.net/wfei101/article/details/79964243
个人分类: C++
上一篇深度学习剖根问底: Adam优化算法理解
下一篇深度学习剖根问底:caffe常用的优化算法solver实现
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭