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;

 

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

 

 

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