c++ - 是否可以在父类中引用子类?

标签 c++ oop inheritance

这是link的后续帖子

我创建了两个类RadAngle和DegAngle,后者继承自前者。因为我想避免代码重复,所以我让 DegAngle 继承自 RadAngle。

注意到在 RadAngle 中,我想制作

class RadAngle {
...
RadAngle toRad(const DegAngle& dang) {.. do something..}  // <-- child class reference
...
}

这可能吗?如果不是,难免要用几乎相同的代码重写两个类?

编辑01: 这是我修改后的代码,它不使用两个类,而是使用一个类和空结构。但是,我认为它会在toRad,toDeg检查输入类型是否一致时产生其他问题。不过这是 future 的工作: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("%.2f\n",c.getVal());

   Angle<Degree,float> d(45.);

   Angle<Degree,float> z = d + Angle<Degree,float>(15.);
   printf("%.2f\n",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)
{
    // ...
}

关于c++ - 是否可以在父类中引用子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48126385/

相关文章:

python - 苹果操作系统 : Using python to capture screenshots of a specific window

c++ - operator= 和 C++ 中不继承的函数?

C++模板化接口(interface)

c++ - 使用 C++ 从 MySQL 数据库获取字符串时编码错误

c++ - boost 元组 'get' 方法如何工作?

c++ - 'reference' typedef 的行为究竟如何?

c++ - 基于模板的设计意见

java - Lombok 注释处理程序类 lombok.javac.handlers.HandleData 失败

c++ - 调用基类的重载方法

c++ - 类定义和使用错误