似乎无法继承受保护的变量

时间:2015-03-12 15:30:13

标签: c++ class c++11

#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类的,所以为什么不能访问它们呢?

1 个答案:

答案 0 :(得分:1)

是的,B可以访问A的受保护成员。但事实上,您通过 v3进行,这使得此尝试基本上与B的成员函数无关。它v3尝试进行访问,而非B::calculatev3不是B&

  

[C++11: 11.4/1]: [..] 所有其他访问都涉及(可能是隐式的)对象表达式(5.2.5)。 在这种情况下,对象表达式的类应为C或从C派生的类。

...接下来是一系列显示您问题的例子。