C++继承后的访问权限-一看便知

直接上代码:

// EX_EXAM.cpp : 定义控制台应用程序的入口点。
//

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

class Parent
{
public:
	Parent(int var=-1)
	{
		m_nPub=var;
		m_nPtd=var;
		m_nPrt=var;
	}
public:
	int m_nPub;
protected:
	int m_nPtd;
private:
	int m_nPrt;
};

class Child1:public Parent
{
public:
	int GetPub() { return m_nPub; }
	int GetPtd() { return m_nPtd; }
	//int GetPrt() { return m_nPrt; }
};

class Child2:protected Parent
{
public:
	int GetPub() { return m_nPub; }
	int GetPtd() { return m_nPtd; }
	//int GetPrt() { return m_nPrt; }
};

class Child3:private Parent
{
public:
	int GetPub() { return m_nPub; }
	int GetPtd() { return m_nPtd; }
	//int GetPrt() { return m_nPrt; }
};

int _tmain(int argc, _TCHAR* argv[])
{
	//Parent Object can access the protected and private member
	Parent parent;
	parent.m_nPub=0;
	parent.m_nPtd=1; //Error
	parent.m_nPrt=2;	 //Error
	Child1 child1;
	child1.m_nPub=0;
	child1.m_nPtd=1; //Error
	child1.m_nPrt=2;	 //Error
	Child2 child2;
	child2.m_nPub=0; //Error
	child2.m_nPtd=1; //Error
	child2.m_nPrt=2;	 //Error
	Child3 child3;
	child3.m_nPub=0; //Error
	child3.m_nPtd=1; //Error
	child3.m_nPrt=2;	 //Error
	return 0;

}


对于一个类的对象,只可以访问public成员,无法访问protected和private成员,但是可以通过成员函数间接访问。这是基本要知道的。其次,就是各个Label在继承中的应用:

 1、公有继承

形式:Class C : public P { };

(1) 类C,拥有对P的绝对访问权限,即:可以访问public、protected成员;private自然是不允许访问了;

(2) 可访问的P中元素都保持原有的访问权限;

(3) 类C对象,自然是只能访问public成员了,因为类P的对象也仅仅是访问public成员而已;

(4) 类C对象要想访问,怎么办?通过类C的成员函数;

2、保护继承

形式:Class C : protected P { };

(1) 类C,拥有对P的绝对访问权限,即:可以访问public、protected成员;private自然是不允许访问了;

(2) 可访问的元素都作为C的保护类成员;

(3) 类C对象,不可访问任何关于P的成员;

3、私有继承

形式:Class C : private P { };

(1) 类C,同2;

(2) 可访问元素作为C的私有成员;

(3) 类C对象,同2;

 

是不是很清楚了,再看看代码吧。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章