C++ 继承与派生的访问性
2017-09-30 14:38
190 查看
实验一:
实验二:
实验三:
总结一(粗判定):上述三个实验分别测试了继承的三个派生类别:public,private,protected
派生类别一:public:此种情形下,基类中的public成员在派生类别中也为public属性,是可以被外部访问的,但是基类中的private,protected成员在派生类别中的属性并没有改变
派生类别二:private:此种类型下,基类中的public,private,protected成员在派生类中均为private属性,无法被外部访问
派生类别三:protected:此种类型下,基类中的public,protected成员在派生类中也为protected属性,只能被派生类的派生类访问,不可以直接被类外对象访问。但是基类中的private成员在派生类中仍然为私有
实验四:
总结二:
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成员将无法被访问
相关文章推荐
- C++第四次实验-----继承和派生
- c++第四次实验—派生和继承1
- C++中的继承(派生)的一些误区
- c++继承与派生
- C++学习摘要之三:继承和派生
- C++之继承与派生
- c++ 类的继承派生
- C++之“继承与派生”
- C++继承与派生
- C++继承与派生
- C++的继承与派生(一)
- C++之继承与派生(2)
- 【c++程序】浅谈继承与派生
- C++学习心得(5)继承与派生
- c++基础(继承与派生)
- C++第10/11周项目 继承与派生 【是春哥啊】(复习新版)
- C++学习之路—继承与派生(一):基本概念与基类成员的访问属性
- 【C++继承与派生之二】有子对象的派生类的构造函数
- PKU C++程序设计实习 学习笔记2 继承与派生
- C++基础:继承与派生(声明 继承方式 访问规则)