是否可以在父类中引用子类
is it possible to refer to child class in parent class?
这是链接的后续帖子
我创建了两个类 RadAngle 和 DegAngle,后者继承自前者。由于我想避免代码重复,所以我使DegAngle继承自RadAngle。
注意到在RadAngle中,我想使
class RadAngle {
...
RadAngle toRad(const DegAngle& dang) {.. do something..} // <-- child class reference
...
}
这可能吗? 如果没有,则不可避免地要用几乎相同的代码重写两个类?
编辑01:这是我修改后的代码,它不使用两个类,而是使用一个类和空结构。但是,我认为这会在toRad,toDeg中产生其他问题,以检查输入类型是否一致。不过这是未来的工作:P
template<typename Unit, typename numT>
class Angle {
public:
Angle() {
AngVal = 0.0;
}
Angle(const numT& angV) {
AngVal = angV;
}
void operator = (const Angle<Unit,numT>& ang1) {
AngVal = ang1.getVal();
}
Angle operator+(const Angle<Unit,numT>& ang1) const { return Angle<Unit,numT>(AngVal+ang1.getVal()); }
Angle operator-(const Angle<Unit,numT>& ang1) const { return Angle<Unit,numT>(AngVal-ang1.getVal()); }
Angle operator*(const Angle<Unit,numT>& ang1) const { return Angle<Unit,numT>(AngVal*ang1.getVal()); }
Angle operator/(const Angle<Unit,numT>& ang1) const { return Angle<Unit,numT>(AngVal/ang1.getVal()); }
numT getVal() const { return AngVal;};
Angle<Unit,numT> toRad(const Angle<Unit,numT>& dang) { return dang.getVal() / 180. * M_PI;}
Angle<Unit,numT> toDeg(const Angle<Unit,numT>& dang) { return dang.getVal() / M_PI * 180.;}
private:
numT AngVal;
};
struct Radian;
struct Degree;
int main() {
Angle<Radian,float> a(1.5);
Angle<Radian,float> b(3.5);
Angle<Radian,float> c = a+b;
//std::cout << c << std::endl;
printf("%.2fn",c.getVal());
Angle<Degree,float> d(45.);
Angle<Degree,float> z = d + Angle<Degree,float>(15.);
printf("%.2fn",z.getVal());
return 0;
}
你不需要用相同的代码编写两个类,你可以使用类模板,让编译器为你"编写"代码。
像这样:
template<typename Unit>
struct Angle
{
// Member functions ...
float magnitude;
};
struct Deg;
struct Rad;
using RadAngle = Angle<Rad>;
using DegAngle = Angle<Deg>;
RadAngle toRadians(const DegAngle& inDegrees)
{
// ...
}
DegAngle toDegrees(const RadAngle& inRadians)
{
// ...
}
相关文章:
- 继承期间显示未知行为的子类
- 对静态分配的子类对象进行静态分配的纯虚拟父类引用是否合法?
- 是否可以在父类中引用子类
- 尝试引用子类中的抽象对象时收到编译错误
- 为什么当指向该子类的指针传递给函数时,会引用该类而不是其子类
- 引用子变量的父类
- 子类化 vtk 样式:未定义的引用
- C++引用基类中的子类指针属性
- 在C++中,如何让(嵌套)比较函子引用封闭类的数据
- 将子类实例替换为超类引用 c++
- C++:子类中的交叉引用
- 在抽象类c的子类中使用来自抽象类的引用
- 当子对象引用被分配给父对象指针时,为什么不能访问子类
- 返回子类的常量引用
- C++将类模板化为子类或引用
- 在泛型和子类代码中需要相互引用的c++类
- 如何调用一个方法,该方法需要一个子类对象,该子类对象由指向其超类的指针引用
- C++子类重载乘法运算符隐藏基重载取消引用运算符
- 子类中的成员是对父成员的引用
- 为什么我不能将超类引用强制转换为同时扩展另一个超类的子类?