在子类中使用父类的对象。您需要将对象作为类构造函数传递吗?
Posted
技术标签:
【中文标题】在子类中使用父类的对象。您需要将对象作为类构造函数传递吗?【英文标题】:Using an object of a parent class within a child class. Do you need to pass the object as a class constructor? 【发布时间】:2019-02-20 11:29:51 【问题描述】:这很可能是一个重复的问题,但我无法找到解决此问题的最佳方法。
我有一个父类,它创建一个对象,该对象具有在该对象上操作的有用方法。然后我想创建一个子类,它通过引用获取父类的对象,并有一堆其他方法可以对其进行操作。
我想知道如何最好地解决这个问题?我应该将指向父类对象的指针作为子类的构造函数传递吗?
我想做的事:
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
【问题讨论】:
您的措辞具有误导性和含糊不清。调用obj_parent
的可访问成员函数所需要的只是指向object_parent
实例的指针或引用(以及所需的任何参数)。 operations
如何获得这样的指针或引用并不重要——但它需要。如果成员函数不可访问,则没有办法(因为这是使成员函数不可访问的目的)。
对象在父类中是私有的还是受保护的(或公有的)?
尝试从不同的方向询问。你想做什么?你希望你的调用代码是什么样的?这可能会建议解决您的问题的最佳方法
对不起,含糊不清,我试图保持主题通用以避免投票,我是多态性/继承的相对初学者。我创建了一个矩阵类,然后有一个子类是求解器。它应该采用两个矩阵对象并求解方程组。矩阵类中有一些有用的方法,例如 print_matrix,所以我想将求解器类保留为矩阵的子类。但我只是不确定如何在求解器类中使用矩阵,而不必在创建求解器类的实例时重新初始化矩阵。
对象在父类中是公共的
【参考方案1】:
好的,下面的示例完全符合您的要求:子对象通过引用修改父对象的实例。父母持有一个单一的整数。是的,在现实生活中,一个对象通常会有多个成员变量,但这只是一个说明性示例。
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
如果您这样做是为了求解方程组(原始问题中未提及,请参阅 cmets),请将上面的 memberNumber 替换为向量向量以表示 2D 矩阵,然后将 addOne 更改为像高斯消元这样的算法来求解方程组。
【讨论】:
以上是关于在子类中使用父类的对象。您需要将对象作为类构造函数传递吗?的主要内容,如果未能解决你的问题,请参考以下文章