IE盒子

搜索
查看: 112|回复: 0

C++日志(二十八)非继承时public、protected和private成员 ...

[复制链接]

2

主题

5

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2022-11-30 13:51:23 | 显示全部楼层 |阅读模式
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成员”。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表