C++从另一个类中用作类型的类继承

C++ inherit from class that is used in another class as a type

本文关键字:类型 继承 另一个 C++      更新时间:2023-10-16

我有以下(简化的)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 派生的实例执行相同的操作不起作用。它返回一个错误,指出:

没有运算符 "=" 与这些操作数匹配

我知道这是由于在大师类中addSomething函数具有类A的类型引起的,但我也需要它与它的子类一起工作。有没有办法在不更改类B的情况下使其工作?

你的目标是给一个C -type-value 一个A -type-value,这与类B的业务无关。你需要做的是为类C编写一个构造函数,并将值交给variableC

因此,请为 C 类添加代码:

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

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

如果你不能改变类B,你可以在类C中实现operator=

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