继承与派生阅读程序补充
2016-05-19 08:37
405 查看
问题及代码:
知识点总结:
1、公有继承
当类的继承方式为公有继承时,基类的公有和保护成员的访问属性在派生类中不变,而基类的私有成员不可访问。即基类的公有成员和保护成员被继承到派生类中仍作为派生类的公有成员和保护成员。派生类的其他成员可以直接访问它们。无论派生类的成员还是派生类的对象都无法访问基类的私有成员。
2、私有继承
当类的继承方式为私有继承时,基类中的公有成员和保护成员都以私有成员身份出现在派生类中,而基类的私有成员在派生类中不可访问。基类的公有成员和保护成员被继承后作为派生类的私有成员,派生类的其他成员可以直接访问它们,但是在类外部通过派生类的对象无法访问。无论是派生类的成员还是通过派生类的对象,都无法访问从基类继承的私有成员。通过多次私有继承后,对于基类的成员都会成为不可访问。因此私有继承比较少用。
3、保护继承
保护继承中,基类的公有成员和私有成员都以保护成员的身份出现在派生类中,而基类的私有成员不可访问。派生类的其他成员可以直接访问从基类继承来的公有和保护成员,但是类外部通过派生类的对象无法访问它们,无论派生类的成员还是派生类的对象,都无法访问基类的私有成员。
先阅读程序,写出你预想的运行结果,再记录运行结果,如果两者有差异,再读程序给出解释。 观察基类A中成员的访问权限制以及派生类B中对这些成员的访问方法。 请将class B:public A 中的public改为protected或者删除,对程序进行编译,解释出现的情况。
#include<iostream> using namespace std; class A { private: int x; protected: int y; public: int z; A(int a,int b,int c) { x=a; y=b; z=c; } int Getx() {return x; } int Gety() {return y; } void ShowA() { cout<< "x="<<x<<'\t'; cout<<"y="<<y<<'\t'; cout<<"z="<<z<<'\n'; } }; class B:public A //修改点(见后面阅读要求) { private: int m,n; public: B(int a,int b,int c,int d,int e):A(a,b,c) { m=d; n=e; } void Show(){ cout<<"m="<<m<<'\t'<<"n="<<n<<'\n'; cout<<"x="<<Getx()<<'\t'; cout<<"y="<<y<<'\t'<<"z="<<z<<'\n'; } int Sum() { return (Getx()+y+z+m+n); } }; int main(){ B b1(1,2,3,4,5); b1.ShowA(); b1.Show(); cout<< "Sum="<<b1.Sum()<<'\n'; cout<<"x="<<b1.Getx()<<'\t'; cout << "y=" <<b1.Gety()<<'\t'; cout << "z="<<b1.z<<'\n'; return 0; }
知识点总结:
1、公有继承
当类的继承方式为公有继承时,基类的公有和保护成员的访问属性在派生类中不变,而基类的私有成员不可访问。即基类的公有成员和保护成员被继承到派生类中仍作为派生类的公有成员和保护成员。派生类的其他成员可以直接访问它们。无论派生类的成员还是派生类的对象都无法访问基类的私有成员。
2、私有继承
当类的继承方式为私有继承时,基类中的公有成员和保护成员都以私有成员身份出现在派生类中,而基类的私有成员在派生类中不可访问。基类的公有成员和保护成员被继承后作为派生类的私有成员,派生类的其他成员可以直接访问它们,但是在类外部通过派生类的对象无法访问。无论是派生类的成员还是通过派生类的对象,都无法访问从基类继承的私有成员。通过多次私有继承后,对于基类的成员都会成为不可访问。因此私有继承比较少用。
3、保护继承
保护继承中,基类的公有成员和私有成员都以保护成员的身份出现在派生类中,而基类的私有成员不可访问。派生类的其他成员可以直接访问从基类继承来的公有和保护成员,但是类外部通过派生类的对象无法访问它们,无论派生类的成员还是派生类的对象,都无法访问基类的私有成员。
相关文章推荐
- 第九周项目训练3
- 谷歌着手建设智能生态圈
- 存储班长信息的学生类(2)
- 存储班长信息的学生类(2)
- 存储班长信息的学生类(2)
- 存储班长信息的学生类(2)
- 存储班长信息的学生类(2)
- 第十一周上机实践项目1(1):点-圆-圆柱类族的设计
- Discuz! 的编码规范
- Android问题一:You need to use a Theme.AppCompat theme (or descendant) with this activity.
- win7系统kb3035583补丁无法卸载解决方法
- ubuntu14.04.1 安装配置jdk1.7
- 用对象数组操作长方柱类
- 第十一周【补充项目1 - 是春哥啊】
- javascript实现打印html制定区域同时消除header/footer区域
- 02.LoT.UI 前后台通用框架分解系列之——灵活的菜单栏
- 快速排序算法
- 第十二周实践项目1.3-实现复数类中的运算符重载
- Android逆向之分析某锁机恶意软件
- Java 9将采用新的版本字符串格式