C ++继承自在另一个类中用作类的类

时间:2016-03-21 09:06:41

标签: c++ inheritance

我有以下(简化的)C ++代码。

class A
{

};

class B
{
    public:
        A addSomething(int something)
        {
            this->something = something;
        }

    private:
        int something;
};

class C : public A
{

};

void main()
{
    B variableB = B();

    A variableA;
    variableA = variableB.addSomething(123);

    C variableC;
    variableC = variableB.addSomething(456);
}

我有三个课程:ABCB被视为主类或主类,CA代表我的上下文中的子类。 类B有一个公共方法,其类型必须为A,并为其私有属性添加一个整数值。类C扩展了类A

在main函数中,实例化了master类,并且它的实例用于添加整数值,这样可以正常工作。 但是,对从类A派生的实例执行相同操作不起作用。它返回错误说:

  

没有运算符“=”匹配这些操作数

我知道这是因为在master类中addSomething函数具有类A的类型,但是我需要它来处理它的子类。 有没有办法让它工作而不改变班级B

2 个答案:

答案 0 :(得分:2)

您的目标是为A - 类型值提供C - 类型值,而不是类B的业务。您需要做的是为类C编写构造函数,并将值赋给variableC

所以为C类添加代码:

class C : public A
{
    public:
        C() {}
        C(A a){}
};

答案 1 :(得分:1)

编译器不知道如何将A的实例分配给C类型的变量。

如果您无法更改课程B,则可以在课程operator=中实施C

class C : public A
{
public:
    C& operator=(const A& a)
    {
        // assign A to C
        return *this;
    }
};