如何让子类包含指向基类的指针

时间:2017-09-22 18:05:07

标签: c++ oop polymorphism

我想设计类似于以下的类结构。主要思想是必要时必须更新基类指针。同样,我们可以对子类进行一些不相关的操作。

我想知道如何重新设计它以获得多态性和封装。这可能是一个非常noob的问题,但任何帮助都表示赞赏。

我并不关心剪切中的内存泄漏,因为在实际代码中正在使用删除操作以避免任何问题。

我想问的是,有一个更好的方法让类结构类似如下所示,而不是Child1调用getBase来获取Base类指针,它可以扩展基类可能已经基类的基类实例化,child1只是简单地封装并提供一些功能。

class Base {
private:
    int a;
    char b;
public:
    Base(int argA, char argB): a(argA), b(argB) {
    }


    char getChar() {
        return b;
    }

    int getInt() {
        return a;
    }

    void setChar(char foo) {
        b = foo;
    }

    void setInt(int foo) {
        a = foo;
    }
};

class Child1 {
private:

    Base *base;
public:
    Child1(PhysicalBlock *argBase) : base(argBase) {

    }

    Base *getBase() {
        return base;
    }

    uint64_t getSum() {
        int a = base->getInt();
        char b = base->getChar();
        return a + (int)b;
    }
};

class Child2 {
private:
    Base * base;
    double c;
public:
    Child2(Base * argBase) : base(argBase), c(0.0) {

    }

    Base *getBase() {
        return base;
    }

    double getDivision() {
        int a = base->getInt();
        char b = base->getChar();

        return (double) ((double)a + (double)b)/c;
    }
};

int bla(Child1 * c1)
{
    Base * b1 = c1->getBase();
    b1->setInt(55);
    b1->setChar('z');
    return c1->getSum();
}

int main()
{
    Base * b1 = new Base(1, 'a');
    Base * b2 = new Base(2, 'b');

    Child1 * child1 = new Child1(b1);
    Child2 * child2 = new Child2(b2);

    bla(child1);

    return 0;
}

0 个答案:

没有答案