(zz)C++类的继承与多重继承的访问控制
来源:互联网 发布:手机投影仪软件 编辑:程序博客网 时间:2024/05/02 01:10
前言: 面试时好几次被问到这个问题,刚问到的时候还真记不清了。
所以在网上搜索了比较详细的一个例子专门描述访问控制的。这里
的例子只针对成员变量,对成员函数也是一样的效果。
//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必闻名出处和作
#include <iostream>
using namespace std;
class Base
{
public://公有的
int a1;
virtual void test() = 0;
protected://受保护的
int a2;
private://私有的
int a3;
};
//------------------------------------------------------------------------------
//保护继承
class ProtectedClass : protected Base{
public:
void test()
{
a1 = 1;//a1在这里被转变为protected
a2 = 2;//a2在这里被转变为protected
//a3=3;//错误,派生类不能访问基类的私有成员
}
};
//以public方式继承ProtectedClass类
class ControlProtectedClass: public ProtectedClass
{
public:
void test()
{
a1 = 1;//a1在这里仍然保持为a1在这里被转变为protected
a2 = 2;//a2在这里仍然保持为a1在这里被转变为protected
//a3=3;//错误,由于Base类成员为私有的,即使是上级父类是保护继续,也不能改变Base类成员的控制类型
}
};
//------------------------------------------------------------------------------
//私有继承
class PrivateClass:private Base{
public:
void test()
{
a1 = 1;//a1在这里被转变为private
a2 = 2;//a2在这里被转变为private
//a3=3;//错误,基类私有成员对文件区域与派生类区域都是不可访问的
}
};
//以public方式继承PrivateClass类
class ControlPrivateClass: public PrivateClass
{
public:
void test()
{
//a1=1;//错误,由于基类PrivateClass为私有继续,a1已经转变为private
//a2=2;//错误,由于基类PrivateClass为私有继续,a1已经转变为private
//a3=3;//错误,由于Base类成员为私有的,PrivateClass类也为私有继续
}
};
//------------------------------------------------------------------------------
//共有继续有区别与其它方式的继续,继续后的各成员不会其改变控制方式
class PublicClass:public Base
{
public:
void test()
{
a1 = 1;//a1仍然保持public
a2 = 2;//a2仍然保持protected
//a3=3;//错误,派生类不能操作基类的私有成员
}
};
//以public方式继承PublicClass类
class ControlPublicClass:public PublicClass{
public:
void test()
{
a1 = 1;//a1仍然保持public
a2 = 2;//a2仍然保持protected
//a3=3;//错误,由于Base类成员为私有成员,即使是上级父类是公有继续,也不能改变Base类成员的控制类型
}
};
- (zz)C++类的继承与多重继承的访问控制
- C++类的继承与多重继承的访问控制
- C++类的继承与多重继承的访问控制
- C++类的继承与多重继承的访问控制
- C++类的继承与多重继承的访问控制
- C++类的继承与多重继承的访问控制
- C++类的继承与多重继承的访问控制(收藏)
- C++类的继承与多重继承的访问控制(网易学院)
- 类的继承与访问控制
- c++类的访问控制与继承
- 【c/c++】继承的访问控制
- 继承的访问控制
- 类的多重继承
- 类的多重继承
- C++类的多重继承与虚拟继承
- c++类的多重继承与虚拟继承
- C++类的多重继承与虚拟继承
- C++ 之 访问控制与访问控制的继承
- 开博了
- 单击BindingNavigator上的删除按钮时弹出确认对话框
- 自己有点疯了
- Programming Windows (一)_ Windows 的运行机制
- Asp.net生命周期
- (zz)C++类的继承与多重继承的访问控制
- css层的定位position、absolute、relative层叠加的五条叠加法则
- 夏令时到底是个什么东西?
- centos修改交换分区使用率
- 日语 お疲れ様 です お疲れ様でした
- 无法连接新安装的SQL Server 2005 Express
- 适合OGRE程序的调试技巧:logManager
- C++ 初学者指南 第一篇(11)
- Vim 基本设置