C++中类的继承方式-public,protected,private
来源:互联网 发布:天心软件和金蝶软件 编辑:程序博客网 时间:2024/06/15 02:29
C++中,有三种继承方式public,protected,private同样,类中也有三种访问权限,public,protected,private
一,公有继承
下面用一个简单的例子测试一下,三种有什么不同
#include <iostream>using namespace std;//定义一个父类Parentclass Parent{//定义三个变量a,b,cprivate: int a;protected: int b;public: int c; //定义三个函数,设置a,b,c的值 void set_a(int n){a=n;} void set_b(int n){b=n;} void set_c(int n){c=n;} //定义一个函数,获得变量a,b,c的值 int get_a(){return a;} int get_b(){return b;} int get_c(){return c;} //定义一个构造函数 Parent(int a=0,int b=1,int c=2):a(a),b(b),c(c){}};class Son:public Parent{};int main(){ //声明并初始化a,b,c Parent P(67,89,97); //a=67,b=89,c=97 /* 分别用P直接访问abc P.a;-------#include <iostream>using namespace std;//定义一个父类Parentclass Parent{//定义三个变量a,b,cprivate: int a;protected: int b;public: int c; //定义三个函数,设置a,b,c的值 void set_a(int n){a=n;} void set_b(int n){b=n;} void set_c(int n){c=n;} //定义一个函数,获得变量a,b,c的值 int get_a(){return a;} int get_b(){return b;} int get_c(){return c;} //定义一个构造函数 Parent(int a=0,int b=1,int c=2):a(a),b(b),c(c){}};class Son:public Parent{};int main(){ //声明并初始化a,b,c Parent P(67,89,97); //a=67,b=89,c=97 /* 分别用P直接访问abc P.a;||=== 报错:D:\visual studio 2015\Projects\test\main.cpp|8|error: 'int Parent::a' is private P.b;//报错:error:'int parent::b 'is protected P.c;ok 说明对于同一个类中,protected和private没什么不同 */Son son;//声明子类son son.set_b(90); son.get_b(); son.set_a(98); son.get_a(); cout<<son.get_a();//代码无异常,说明,父类的一切都被子类完整的继承了 return 0;}二,保护继承我们更改一下继承方式class Son:protected class Parent代码不变,结果:||=== 生成: Debug in test (compiler: GNU GCC Compiler) ===|D:\visual studio 2015\Projects\test\main.cpp||In function 'int main()':|D:\visual studio 2015\Projects\test\main.cpp|16|error: 'void Parent::set_b(int)' is inaccessible|D:\visual studio 2015\Projects\test\main.cpp|41|error: within this context|D:\visual studio 2015\Projects\test\main.cpp|41|error: 'Parent' is not an accessible base of 'Son'|D:\visual studio 2015\Projects\test\main.cpp|21|error: 'int Parent::get_b()' is inaccessible|D:\visual studio 2015\Projects\test\main.cpp|42|error: within this context|D:\visual studio 2015\Projects\test\main.cpp|42|error: 'Parent' is not an accessible base of 'Son'|D:\visual studio 2015\Projects\test\main.cpp|15|error: 'void Parent::set_a(int)' is inaccessible|D:\visual studio 2015\Projects\test\main.cpp|43|error: within this context|D:\visual studio 2015\Projects\test\main.cpp|43|error: 'Parent' is not an accessible base of 'Son'|D:\visual studio 2015\Projects\test\main.cpp|20|error: 'int Parent::get_a()' is inaccessible|D:\visual studio 2015\Projects\test\main.cpp|44|error: within this context|D:\visual studio 2015\Projects\test\main.cpp|44|error: 'Parent' is not an accessible base of 'Son'|||=== Build 失败了: 12 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|父类原有的public 函数被子类protected继承后,变得不可访问了![这里写图片描述](http://img.blog.csdn.net/20160531211315757)由图片知道,protected继承,会降低访问权限
修改一下代码:
class Son:protected Parent{public: void set_value(int n) { set_a(n); set_b(n); set_c(n); }};int main(){ Son son; son.set_value(90); return 0;}
“`
这样修改就OK了,说明了两点,一是,protected继承,会降低访问权限
二是,protected 和private 一样,不能直接访问,要通过函数才能调用
private 继承同理
0 0
- C++中类的继承方式-public,protected,private
- 继承 Objective-C中public、protected、private的使用
- 派生类的继承方式 :public,protected,private
- 类继承的方式(public、private、protected)
- 类的public protected private 继承方式理解
- C++:public继承、protected 继承、private继承
- C++:public继承、protected 继承、private继承
- C++中public/private/protected三种继承方式下基类成员对派生类的可见性探讨
- C++中public/private/protected三种继承方式下基类成员对派生类的可见性探讨
- C++中继承机制下基类public/private/protected成员的访问方式
- C++中public,protected,private继承的语意
- C++中public,protected,private继承的语意
- C++中public,protected,private继承的语意
- public、private、protected继承
- public、protected、private继承
- C++中的public、protected与private的类成员权限设置和继承方式
- C++中public&protected&private继承
- 公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。
- python 小概念日常总结
- #码神学习#第四天
- [疯狂Java]集合:IdentityHashMap、EnumMap
- 虚拟机网络类型选择
- ASCII文件操作
- C++中类的继承方式-public,protected,private
- 初学javaScript
- R语言动量交易策略分析
- Bundle传参
- 简单计算器
- android自定义View浅析
- 数据库测试
- 跳石头
- 【刷题之路】寻找错误结点