#include<iostream>
#include <stdlib.h>
#include<cmath>
#include<algorithm>
using namespace std;
class A
{
protected:
int x,y;
public:
A():x(0),y(0){}
A(double vx, double vy):x(vx), y(vy){}
~A(){}
};
class B: public A
protected:
double ct;
public:
B(): A(0,0), ct(0){}
B(double x, double y, double ctin): A(x,y), ct(ctin){}
B calculate(B &v3,A &v2);
~B(){}
};
B B::calculate(B &v4,A &v3)
{
x = v4.x*v3.x;
B temp_R(x,y,ct);
return temp_R;
}
我正在尝试访问v3的第一个组件,即A类,但代码将无法编译,
上的错误消息 v3.x;
陈述:“受保护的成员”A :: x“无法通过”A“指针或对象访问。
我认为x和y是从A类继承到B类的,所以为什么不能访问它们呢?
答案 0 :(得分:1)
是的,B
可以访问A
的受保护成员。但事实上,您通过 v3
进行,这使得此尝试基本上与B
的成员函数无关。它v3
尝试进行访问,而非B::calculate
和v3
不是B&
。
[C++11: 11.4/1]:
[..] 所有其他访问都涉及(可能是隐式的)对象表达式(5.2.5)。 在这种情况下,对象表达式的类应为C
或从C
派生的类。
...接下来是一系列显示您问题的例子。