我想设计类似于以下的类结构。主要思想是必要时必须更新基类指针。同样,我们可以对子类进行一些不相关的操作。
我想知道如何重新设计它以获得多态性和封装。这可能是一个非常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;
}