【问题标题】:Can't seems to inherit a protected variable似乎不能继承受保护的变量
【发布时间】:2015-03-12 15:30:12
【问题描述】:
#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 类的,那为什么不能访问它们呢?

【问题讨论】:

  • 受保护的成员功能? o.O
  • 伴侣此代码还有其他不相关的问题。请发布您的 实际 MCVE,而不是您在问题提交框中发明的一些 sn-p。
  • @LightnessRacesinOrbit 抱歉刚刚受保护的成员:P
  • class A { 然后是base(double, double) 的构造函数?这是相当一些未解决的问题是的。
  • @LightnessRacesinOrbit,好的,让我缩短我的代码以便于理解。

标签: c++ class c++11


【解决方案1】:

是的,B 可以访问 A 的受保护成员。但事实上,您正在通过v3,这使得从B 的成员函数中进行此尝试基本上无关紧要。尝试访问的是v3,而不是B::calculate,并且v3 不是B&amp;

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

…后面是一堆例子,正好说明了你的问题。

【讨论】:

    猜你喜欢
    • 2014-06-29
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 2016-06-12
    • 2015-01-19
    • 2014-06-09
    • 1970-01-01
    相关资源
    最近更新 更多