您的位置:首页 > 编程语言 > C语言/C++

C++ derived class access specifier

2014-02-10 22:23 204 查看
// DerivedAccessSpecifier.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

class base
{
public:
int pub_a = 0;
private:
int pri_b = 0;
protected:
int pro_c = 0;
};

class pub_derived : public base
{
public:
int use_pub(){ return pub_a; }    //public派生类可以访问父类的public成员
//int use_pri(){ return pri_b; }  //public派生类不可以访问父类的private成员
int use_pro(){ return pro_c; }    //public派生类可以访问父类的protected成员
};

class pri_derived : private base
{
public:
int use_pub(){ return pub_a; }    //private派生类可以访问父类的public成员
//int use_pri(){ return pri_b; }  //private派生类不可以访问父类的private成员
int use_pro(){ return pro_c; }    //private派生类可以访问父类的protected成员

};

class pro_derived : protected base
{
public:
int use_pub(){ return pub_a; }    //protected派生类可以访问父类的public成员
//int use_pri(){ return pri_b; }  //protected派生类不可以访问父类的private成员
int use_pro(){ return pro_c; }    //protected派生类可以访问父类的protected成员
};

//由上可知,派生时的access specifier对派生类中的成员没有影响

class dd_pub : public pub_derived
{
public:
int dd_use_pub(){ return pub_a; }  //yes
//int dd_use_pri(){ return pri_b; }  //no
int dd_use_pro(){ return pro_c; }  //yes
};

class dd_pri : public pri_derived
{
public:
//int dd_use_pub(){ return pub_a; } //no
//int dd_use_pri(){ return pri_b; } //no
//int dd_use_pro(){ return pro_c; } //no
};

class dd_pro : public pro_derived
{
public:
int dd_use_pub(){ return pub_a; }  //yes
//int dd_use_pri(){ return pri_b; }  //no
int dd_use_pro(){ return pro_c; }  //yes
};

int _tmain(int argc, _TCHAR* argv[])
{
pub_derived a;
pri_derived b;
pro_derived c;

cout << a.pub_a << endl;    //yes
//cout << b.pub_a << endl;  //no
//cout << c.pub_a << endl;    //no

return 0;
}

//由上可知,派生时的access specifier对派生类的users有影响,users包括:派生类的派生类,派生类的对象。
//即影响派生类的interface
//public :   父类的public、private、protected不变
//private:    父类的public、private、protected都变成private
//protected:  父类的public变成protected,private不变,protected还是protected
//即优先级为: private > protected > public
//优先级大的可以改变优先级小的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ access specifier