gpt4 book ai didi

c++ - 在派生类中使用指向基类的指针访问基类保护成员

转载 作者:太空宇宙 更新时间:2023-11-04 12:52:46 26 4
gpt4 key购买 nike

考虑以下代码:

#include <iostream>

using std::endl;
using std::cout;

template<typename T>
class B{
protected:
T value;
B* ptr;
public:
B(T t):value(t), ptr(0){}
};

template<typename T>
class D: public B<T>{
public:
void f();
D(T t):B<T>(t){}
};

template<typename T>
void D<T>::f(){
cout << this->value << endl; //OK!
this->ptr = this;
cout << this->ptr->value << endl; //error! cannot access protected member!!
B<T>* a = this;
cout << a->value <<endl; //error! cannot access protected member!!
}


int main(){
D<double> a(1.2);
a.f();
return 0;
}

看来基类的成员可以用this指针直接访问,其他指针不行。
编译器是否将它们视为不同的实例化?

最佳答案

是的,这是预期的行为。 Protected members基类可以在派生类中访问,但只能通过派生类(或当前派生类的进一步派生类)的类型的对象(包括this)。这意味着您无法通过指向基类的指针访问 protected 成员。

A protected member of a class Base can only be accessed

1) ...

2) by the members of any class derived from Base, but only when operating on an object of a type that is derived from Base (including this)

关于c++ - 在派生类中使用指向基类的指针访问基类保护成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48190048/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com