这可能是一个重复的问题,但我一直无法找到解决此问题的最佳方法。
我有一个父类,它创建一个对象,该对象具有在该对象上运行的有用方法。然后,我想创建一个子类,该子类通过引用获取父类的对象,并具有对其进行操作的其他方法。
我想知道如何最好地做到这一点?我应该传递一个指向父类对象的指针作为子类的构造函数吗?
我想做什么:
class obj_parent{
initializes object
virtual void method_1
virtual void method_2
}
class operation: public obj_parent {
void opertation_method_1(*object)
void opertation_method_2(object)
}
如果对父类和子类进行模板化,还会有什么区别?
关于该主题的一些参考文献并未完全回答我的问题,但可能很有用。 Pass an object to a class constructor Passing object of a template class to constructor of another class
答案 0 :(得分:1)
好,因此下面的示例完全可以完成您想做的事情:子对象通过引用修改父对象的实例。父级拥有一个int。是的,在现实生活中,一个对象通常会具有多个成员变量,但这只是一个示例。
class parentInt {
public:
int memberNumber;
parentInt(int number) {
memberNumber = number;
}
parentInt() {
memberNumber = 0;
}
};
class childInt : public parentInt {
public:
parentInt& mReferenceToParentObject;
childInt(parentInt& referenceToParentObject) :mReferenceToParentObject(referenceToParentObject) {}
void addOne() {
mReferenceToParentObject.memberNumber++;
}
void subtractOne() {
mReferenceToParentObject.memberNumber--;
}
};
int main()
{
parentInt p(5); //parent int is 5
childInt c(p); //child int is a reference to parent
c.addOne(); // parent's memberNumber is now 6 because the child modified the parent through the reference
c.subtractOne(); // parent's memberNumber is now 5 because the child modified the parent through the reference
}
如果您这样做是为了求解方程组(原始问题中未提及,请参见评论),则将上面的memberNumber替换为代表2D矩阵的向量,然后将addOne更改为高斯消像算法方程组。