首页 > 解决方案 > C++中的类系统架构

问题描述

对于我最新的项目,我有一堂课

class Parent {
    public:
        // class constructor
        Parent();
        
        // member function
        double fun(double x)
};

和另一个班级

class Child {
    private:
        int type;
    public:
        // class constructor
        Child(int itype);
};

我知道我可以Parent通过指定继承函数,class Child : public Parent以便我的类的实例child可以调用fun. 但是,我希望该函数fun根据type. 例如,如果我的Child类的实例由Child nChild(1);调用初始化,nChild.fun(5)则应返回 的平方根,而通过调用5初始化类应返回对数,依此类推。Child nChild(2);nChild.fun(5)5

我如何设计一个具有依赖关系的类系统,使得父类中的函数取决于子类的值?这是否有意义,或者是或通常建议不要使用这种架构?请注意,我不是 C++ 专家。

标签: c++class

解决方案


您可以在父类中保留 aprotected: int myType;并在派生类中使用它来打开。然而,更好的设计是为每种类型创建一个不同的派生类来覆盖该fun()方法。

class Parent
{
public:

    Parent();

    virtual double fun(double x) = 0;
};

class ChildLog : public Parent
{
public:
    ChildLog();
    double fun(double x)
    {
        // return log(x)
    }
};

class ChildSqrt : public Parent
{
public:
    ChildSqrt();
    double fun(double x)
    {
        // return sqrt(x)
    }
};

推荐阅读