我很困惑:我认为受保护的数据是由C++中给定类的子进程读/写的.
以下代码段无法在MS Compiler中编译
class A
{
protected:
int data;
};
class B : public A
{
public:
B(A &a)
{
data = a.data;
}
};
int main()
{
A a;
B b = a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误信息:
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
demoFail.cpp
demoFail.cpp(12) : error C2248: 'A::data' : cannot access protected member declared in class 'A'
demoFail.cpp(4) : see declaration of 'A::data'
demoFail.cpp(2) : see declaration of 'A'
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
rlb*_*ond 10
根据TC++ PL,第404页:
派生类只能为其自身类型的对象访问基类的受保护成员....这可以防止在一个派生类破坏属于其他派生类的数据时可能发生的细微错误.
当然,这是一个简单的方法来解决这个问题:
class A
{
protected:
int data;
};
class B : public A
{
public:
B(const A &a)
: A(a)
{
}
};
int main()
{
A a;
B b = a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4737 次 |
| 最近记录: |