【发布时间】:2023-03-18 04:37:01
【问题描述】:
我有一门课
class Shape;
class Triangle;
class Amorpher
{
public:
Amorpher();
Amorpher(Shape*);
Amorpher(Shape&);
~Amorpher();
Shape* pShape;
void GetShapeArea();
void Shapeshift(Shape&, string);
void Shapeshift(Shape*, string);
private:
Triangle* triangle;
};
和实现
Amorpher::Amorpher()
{
}
Amorpher::Amorpher(Shape* shape) : pShape(shape){}
void Amorpher::GetShapeArea()
{
cout << "shape area is: " << pShape->Area();
}
Amorpher::~Amorpher()
{
}
void Amorpher::Shapeshift(Shape* shape,string shiftTo)
{
if (shiftTo == "triangle")
{
(Triangle*)shape = triangle;
}
}
三角形继承自形状。我想在 Shapeshift 方法中尝试将传递给方法的 Shape 转换为三角形。不是所有的形状都是三角形,但为什么我不能明确地进行这个演员表?前向声明是否与问题有关?
【问题讨论】:
-
triangle = (Triangle*)shape -
你到底想在 Shapeshift 中做什么?
-
@Barry 只是了解语法和语义,真的。对于你和不能用前向声明做的事情,我没有规定所有的规则,我不知道我是否被允许做我尝试过的事情。
-
@wootscootinboogie 什么的语法?您是否尝试将
triangle分配给shape?shape到triangle?pShape参与了吗? -
我会考虑跳过
ShapeShift方法中的shiftTo参数,因为它可能是多余的。你想变形的类型可以直接从传入的shape的类型推断出来。使用typeid()推断这个属性。
标签: c++ polymorphism