C++ 例4.1 私有继承的访问规则举例1
来源:互联网 发布:做网络推广怎么找客户 编辑:程序博客网 时间:2024/06/05 20:45
//例4.1 私有继承的访问规则举例1.#include<iostream>using namespace std;class Base{ //声明基类Basepublic: void setx(int n) //正确,成员函数setx可以访问本类的私有成员x {x = n; } void showx() //正确,成员函数showx可以访问本类的私有成员x {cout<<x<<endl; }private:int x;};class Derived:private Base{// 声明基类Base的私有派生类Derived public: void setxy(int n,int m){setx(n); //基类的setx函数在派生类中为私有成员,派生类成员函数可以访问y=m; //正确,成员函数setxy可以访问本类的私有成员y}void showxy(){ //cout<<x; //错误,派生类成员函数不能直接访问基类的私有成员x cout<<y<<endl;//正确,成员函数showxy可以访问本类的私有成员y}private: int y;};int main(){Derived obj;//obj.setx(10); //错误,setx在派生类中为私有成员,派生类对象不能访问//obj.showx(); //错误,showx在派生类中为私有成员,派生类对象不能访问obj.setxy(20,30); //正确,setxy在类derived为公有成员,派生类对象能访问obj.showxy(); //正确,showxy在类derived为公有成员,派生类对象能访问return 0;}/*本例中首先定义了一个类Base,它有一个私有数据成员x和两个公有成员函数setx和showx。将类Base作为基类,派生出一个类Derived。派生类Derived除继承了基类的成员外,还有只属于自己的成员:私有数据成员y,公有成员函数setxy和showxy。继承方式关键字是private,所以这是一个私有继承。由于是私有继承,所以基类Base的公有成员函数setx和showx被派生类Derived私有继承后,成为派生类Derived的私有成员,只能被类Derived的成员函数访问,不能被派生类的对象访问。所以在main函数中,对函数obj.setx和obj.showx的调用是错误的,因为这两个函数在派生类Derived中已成为私有成员。需要注意的是,虽然函数setx和showx被派生类继承,但它们仍然是Base的公有成员,因此以下的调用是正确的:Base base_obj;base_obj.setx(2);虽然派生类Derived私有继承了基类Base,但它的成员函数并不能直接访问Base的私有数据x,只能访问两个公有成员函数。所以在类Derived的成员函数setxy中访问Base的公有成员函数setx是正常的,但在成员函数showxy中直接访问Base的私有成员x是错误的。但是可以通过基类提供的公有成员函数showx间接访问私有成员x。例如将函数main中两条错误词句去掉,并且把例中函数showxy改成如下形式:void showxy(){ showx(); cout<<y<<endl;}重新编译,程序将顺利通过。可见基类中的私有成员既不能被派生类的对象访问,也不能被派生类的成员函数访问,只能被基类自己的成员函数访问。因此,我们在设计基类时,总要为它的私有数据成员提供公有成员函数,如本例的成员函数showx等,以便使派生类可以间接访问这些数据成员。 修改后,程序运行结果如下: 20 30*/
阅读全文
0 0
- C++ 例4.1 私有继承的访问规则举例1
- 4_2 私有继承的访问规则举例2
- 例4.3 公有继承的访问规则举例
- 例4.4 保护继承的访问规则举例
- 继承的访问控制--私有继承
- C++继承的访问规则
- C++私有继承访问
- 继承的访问控制_私有继承(C++语言)
- C/C++--私有继承
- 4.C++:C++类的私有继承
- C++:私有继承
- <C++>私有变量的访问权限
- 子类能否继承、访问父类的私有成员
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- C/C++:private私有继承
- tensorflow-4D特征图放缩,tensorboard初使用
- cin&&scanf
- ThinkPHP框架中添加(add)或更新(save)时过滤某些字段的问题
- Qt5.6.2+QtCreator4.3.1与matlabR2016a混合编程(64位)
- JZOJ 5221. 【GDOI2018模拟7.10】A
- C++ 例4.1 私有继承的访问规则举例1
- 设计模式之观察者模式 二
- 常用Shell命令(三)(附加*)
- linux常用命令-重定向与管道操作
- linux 端口映射 桥连模式下无法访问到linux可以通过端口映射访问
- It is not safe to rely on the system's timezone settings. 的PHP问题处理
- UGUI之靠边停靠菜单制作
- 树梅派网线直连电脑并显示界面
- 快速排序(C语言版本)