大家好,欢迎来到IT知识分享网。
-
在没有继承的情况下,protected跟private相同。在派生类的时候才出现分化
-
基类对象不能访问基类的protected成员,派生类中可以访问基类的protected成员。也就是说private成员是不能被继承的,只有public,protected的成员才可以被继承
-
只有在派生类中才可以通过派生类对象访问基类的protected成员
#include <iostream>
using namespace std;
class base {
public:
base() {
}
virtual ~base() {
}
protected:
int int_pro; // 基类可以访问自己所有的东西
};
class derived : public base {
public:
derived() {
}
~derived() {
}
void Print(derived &obj){
obj.int_pro = 24;}
//void Print(base &obj){obj.int_pro = 24;}
void foo(){
this->int_pro = 1; // 这里访问m没有问题 ---> 继承了父类的protected
}
};
int main()
{
base *pBase = new base;
// pBase->int_pro = 11; // 错误:‘int base::int_pro’是保护的 ---> 基类对象不能访问基类的protected成员
derived *pderived = new derived;
// pderived->int_pro = 11; // 自己的对象都不能访问,怎么可能让继承者访问
delete pBase;
return 0;
}
- private: 只能被类成员函数及友元访问,不能被其他任何访问,本身的类对象也不行。
- protected: 只能被类成员函数、子类函数及友元访问,不能被其他任何访问,本身的类对象也不行。
- public: 能被类成员函数、子类函数、友元访问,也能被类的对象访问。
- 派生类的成员和友元只能通过派生类对象访问基类的受保护成员,不能直接访问基类对象的受保护成员。如:
class Base{
protected:
int val;
};
class Derived:public Base{
friend void f1(Base&);
friend void f2(Derived&);
};
void f1(Base &b) {
b.val = 10;} //错误,不能通过基类对象访问
void f2(Derived &d) {
d.val = 10;} //正确,可以通过派生类对象访问基类部分的protected
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/24556.html