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