BCS*_*BCS 13 c++ specifications protected
这段代码:
class B {
protected:
void Foo(){}
}
class D : public B {
public:
void Baz() {
Foo();
}
void Bar() {
printf("%x\n", &B::Foo);
}
}
Run Code Online (Sandbox Code Playgroud)
给出了这个错误:
t.cpp: In member function 'void D::Bar()':
Line 3: error: 'void B::Foo()' is protected
Run Code Online (Sandbox Code Playgroud)
顺便说一下:这看起来很相关,但是我正在寻找一个参考指标或类似内容的地方(希望这将导致如何按照我期望的方式工作).
Naw*_*waz 20
您可以通过D写作&D::Foo来取代地址,而不是&B::Foo.
看到这个编译很好:http://www.ideone.com/22bM4
但这不编译(您的代码):http://www.ideone.com/OpxUy
为什么我可以调用受保护的方法但不能使用其地址?
您不能通过写入来获取其地址,&B::Foo因为Foo它是受保护的成员,您无法从外部访问它B,甚至不能访问它的地址.但是写作&D::Foo,你可以,因为Foo成为D继承的成员,你可以得到它的地址,无论它是私人的,受保护的还是公共的.
&B::Foo具有同样的限制b.Foo()和pB->Foo()有,在下面的代码:
void Bar() {
B b;
b.Foo(); //error - cannot access protected member!
B *pB = this;
pB->Foo(); //error - cannot access protected member!
}
Run Code Online (Sandbox Code Playgroud)
请参阅ideone上的错误:http://www.ideone.com/P26JT
| 归档时间: |
|
| 查看次数: |
5710 次 |
| 最近记录: |