|
C++中保护成员使用protected进行声明,那么protected、public和private三者有什么区别呢?本文如有错误请指出,万分感谢!
先说结论:非继承时,protected成员和private成员没有任何区别,都是类内部可以直接访问它们、类外部的类对象不可访问它们、类内部的类对象可以访问它们;相比之下,public成员在类内部、类外部的类对象、类内部的类对象中都是可直接访问的。下面定 义的Bird类:
class Bird {
public:
Bird() {
eat(); // 正确,类内可以访问保护成员
};
protected:
void eat() { printf("Bird eating \n"); }
};
上述代码表明,类内是可以直接访问protected成员的,下面来看类外部的类对象:
int main() {
Bird bird();
bird.eat(); // 错误,protected成员类外部对象不可访问
}
上述代码表明,类外部类对象是不能直接访问protected成员的。
所以说,非继承时protected成员和private成员没有差别。它们真正展示出差异是在“基类和子类的继承”时,具体分析留在后面日志。
重点:上述分析强调了“类外部的类对象和类内部的类对象”是不同的(类内部类对象是指:Bird类的复制构造函数就使用Bird类对象的引用可以访问其私有成员和保护成员)。因此,才要特殊指明“类外部的类对象不能访问protected和private成员,类内部的类对象可以访问其protected和private成员”。 |
|