也不知道应不应该算原创,这些内容几乎每本讲面向对象语言的书里面都有 ,只不过是长时间不用,忘记了,自己写一段代码验证一下,姑且就算原创吧~~
也没什么好多说的,就一段代码:
//
目的:试验基类中的 private 成员是否能被派生类访问
// 结果:基类中的 private 成员不能被派生类访问
// 办法:若想让基类中的成员能够被派生类访问,而又不能让外界访问,用 protected 成员
class BaseClass ... { // 基类
private:
int m_iPrivate; // private 成员
protected:
int m_iProtected; // protected 成员
public:
int GetPrivateMember() ...{ return m_iPrivate; }
int GetProtectedMember() ...{ return m_iProtected; }
BaseClass() ...{ // 构造函数, 初始化成员
m_iPrivate = 0;
m_iProtected = 0;
}
} ;
class DeriveClass : public BaseClass ... { // 派生类, 派生自 BaseClass
public:
void fun() ...{
// m_iPrivate = 1; // 错误, 派生类不能访问基类 private 成员
m_iProtected = 1; // 正确, 派生类可以访问基类 protected 成员
}
} ;
int main() ... {
BaseClass base;
// base.m_iPrivate; // 错误, private 成员外部不能访问
// base.m_iProtected; // 错误, protected 成员外部不能访问
base.GetPrivateMember(); // 正确, 通过 public 成员访问 private 成员
base.GetProtectedMember(); // 正确, 通过 public 成员访问 protected 成员
return 0;
}
// 结果:基类中的 private 成员不能被派生类访问
// 办法:若想让基类中的成员能够被派生类访问,而又不能让外界访问,用 protected 成员
class BaseClass ... { // 基类
private:
int m_iPrivate; // private 成员
protected:
int m_iProtected; // protected 成员
public:
int GetPrivateMember() ...{ return m_iPrivate; }
int GetProtectedMember() ...{ return m_iProtected; }
BaseClass() ...{ // 构造函数, 初始化成员
m_iPrivate = 0;
m_iProtected = 0;
}
} ;
class DeriveClass : public BaseClass ... { // 派生类, 派生自 BaseClass
public:
void fun() ...{
// m_iPrivate = 1; // 错误, 派生类不能访问基类 private 成员
m_iProtected = 1; // 正确, 派生类可以访问基类 protected 成员
}
} ;
int main() ... {
BaseClass base;
// base.m_iPrivate; // 错误, private 成员外部不能访问
// base.m_iProtected; // 错误, protected 成员外部不能访问
base.GetPrivateMember(); // 正确, 通过 public 成员访问 private 成员
base.GetProtectedMember(); // 正确, 通过 public 成员访问 protected 成员
return 0;
}