直接上代碼:
// 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;
是不是很清楚了,再看看代碼吧。