C++ 继承与派生的访问性
来源:互联网 发布:数据收集平台 编辑:程序博客网 时间:2024/05/17 03:10
实验一:
1 #include <iostream> 2 using namespace std; 3 4 class cPerson 5 { 6 public: 7 int a; 8 cPerson() //定义构造函数,初始化成员变量 9 {10 a=1;11 b=2;12 c=3;13 }14 private:15 int b;16 protected:17 int c;18 };19 20 class cPeople : public cPerson //定义cPeople类,继承cPerson类,继承方式:公共21 { 22 public:23 void PrintVal();24 25 };26 27 void main()28 {29 cPeople p;30 cout<<p.a<<endl; //正确,可访问31 cout<<p.b<<endl; //错误,无法访问32 cout<<p.c<<endl; //错误,无法访问33 }
实验二:
1 #include <iostream> 2 using namespace std; 3 4 class cPerson 5 { 6 public: 7 int a; 8 cPerson() //定义构造函数,初始化成员变量 9 {10 a=1;11 b=2;12 c=3;13 }14 private:15 int b;16 protected:17 int c;18 };19 20 class cPeople : private cPerson //定义cPeople类,继承cPerson类,继承方式:私有21 {22 public:23 void PrintVal();24 25 };26 27 void main()28 {29 cPeople p;30 cout<<p.a<<endl; //错误,无法访问31 cout<<p.b<<endl; //错误,无法访问32 cout<<p.c<<endl; //错误,无法访问33 }
实验三:
1 #include <iostream> 2 using namespace std; 3 4 class cPerson 5 { 6 public: 7 int a; 8 cPerson() //定义构造函数,初始化成员变量 9 {10 a=1;11 b=2;12 c=3;13 }14 private:15 int b;16 protected:17 int c;18 };19 20 class cPeople : protected cPerson //定义cPeople类,继承cPerson类,继承方式:保护21 {22 public:23 void PrintVal();24 25 };26 27 void main()28 {29 cPeople p;30 cout<<p.a<<endl; //错误,无法访问31 cout<<p.b<<endl; //错误,无法访问32 cout<<p.c<<endl; //错误,无法访问33 }
总结一(粗判定):上述三个实验分别测试了继承的三个派生类别:public,private,protected
派生类别一:public:此种情形下,基类中的public成员在派生类别中也为public属性,是可以被外部访问的,但是基类中的private,protected成员在派生类别中的属性并没有改变
派生类别二:private:此种类型下,基类中的public,private,protected成员在派生类中均为private属性,无法被外部访问
派生类别三:protected:此种类型下,基类中的public,protected成员在派生类中也为protected属性,只能被派生类的派生类访问,不可以直接被类外对象访问。但是基类中的private成员在派生类中仍然为私有
实验四:
#include <iostream>using namespace std;class cPerson{public:int a;cPerson() //定义构造函数,初始化成员变量{a=1;b=2;c=3;}private:int b;protected:int c;};class cPeople : public cPerson //定义cPeople类,继承cPerson类,继承方式:public{public:void PrintVal(){cout<<a<<endl; //正确,可以访问cout<<b<<endl; //错误,无法访问cout<<c<<endl; //正确,可以访问}};void main(){cPeople p;p.PrintVal(); //error,无法访问private成员}
实验五:
#include <iostream>using namespace std;class cPerson{public:int a;cPerson() //定义构造函数,初始化成员变量{a=1;b=2;c=3;}private:int b;protected:int c;};class cPeople : private cPerson //定义cPeople类,继承cPerson类,继承方式:private{public:void PrintVal(){cout<<a<<endl; //正确,可以访问cout<<b<<endl; //错误,无法访问cout<<c<<endl; //正确,可以访问}};class cMan : public cPeople //定义cMan类,继承cPeople类,继承方式:public{public:void PrintVal(){cout<<a<<endl; //错误,无法访问}};void main(){cMan p;p.PrintVal(); //error,无法访问private成员}
总结二:上述两个实验(实验四、五)测试了在派生类别的定义中访问基类成员的有效性
一、当派生类别为public时,可以在派生类别的定义中访问基类中的public和protected成员,但是无法访问private成员
这也证实了protected成员的特性:可被派生类别访问
二、当派生类别为private时,访问性同上,但是此时基类中的public成员在派生类中变为了private,若再次继承派生类,则基类中原来的
public成员将无法被访问
阅读全文
0 0
- C++ 继承与派生的访问性
- C++: 继承与派生
- 继承与派生(C++)
- C++:继承与派生
- 继承与派生:派生类对基类成员的访问控制之公有继承
- 三十七、继承与派生:派生类对基类成员的访问控制之公有继承
- C++继承与派生的访问基本规则
- C++_继承与派生
- C++_继承与派生
- C++_继承与派生
- C++_继承与派生
- 【学习C++】继承与派生
- 继承与派生:派生类对基类成员的访问控制之保护继承与私有继承
- 三十八、继承与派生:派生类对基类成员的访问控制之保护继承与私有继承
- O-c中类的继承与派生的概念
- C++: 类的继承派生
- C++-继承:基类与派生类的关系
- 类的继承与派生
- 分析Fiddler抓取的豆瓣开发的API接口详解
- 响应式网站开发的干货
- Java复制文件的4种方式
- NFS原理安装配置
- 如何优雅地用TensorFlow预测时间序列:TFTS库详细教程
- C++ 继承与派生的访问性
- Linux下单网卡设置双ip,ubuntu设置双IP
- Function类型(重点)
- java设计模式之建造者模式
- Linux下redis的安装
- 读写文件Filestream
- ECMA6入门
- 两种方法让WordPress只在首页显示友情链接
- 倒计时84天