我有以下(简化的)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);
}
我有三个课程:A
,B
和C
。 B
被视为主类或主类,C
和A
代表我的上下文中的子类。
类B
有一个公共方法,其类型必须为A
,并为其私有属性添加一个整数值。类C
扩展了类A
。
在main函数中,实例化了master类,并且它的实例用于添加整数值,这样可以正常工作。
但是,对从类A
派生的实例执行相同操作不起作用。它返回错误说:
没有运算符“=”匹配这些操作数
我知道这是因为在master类中addSomething
函数具有类A
的类型,但是我需要它来处理它的子类。
有没有办法让它工作而不改变班级B
?
答案 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;
}
};