在c ++中有一个共鸣,为什么您要将对基类的引用传递给派生类的构造函数?您为什么要这样做?
这是一个基本示例:
#include<iostream>
using namespace std;
class Base
{
int x;
public:
virtual void fun() = 0;
int getX() { return x; }
};
// This class ingerits from Base and implements fun()
class Derived: public Base
{
int y;
public:
Derived(Base& object);
void fun() { cout << "fun() called"; }
};
答案 0 :(得分:1)
通常,将参数传递给构造函数,因为参数的状态可用于初始化正在构造的对象的状态。同样适用于这种情况。
非常量引用参数可以(并且几乎总是)用于修改所引用的对象。
答案 1 :(得分:1)
在c ++中,为什么有理由将对基类的引用传递给派生类的构造函数?
通常有一个原因可以将对对象的引用传递给构造函数,而该对象类型是否与构造对象无关真的无关紧要-要构造该类型,您需要该对象的信息。使用左值引用而不是const可能意味着不良的设计或ctor将需要修改传递的对象或将非常量引用/指针保留给它。
答案 2 :(得分:0)
我认为问题是“为什么要通过基类引用而不是派生类引用?”。如果是这样,则传递Base&
而不是Derived&
的原因是,假设OtherDerived&
继承了OtherDerived
,则前者允许您传递Base
引用。这被称为多态,在C ++中是相当重要的。
Here's几乎是相同的问题,只是功能而不是构造函数。