C ++为什么将对基类的引用传递给派生类的构造函数

时间:2018-08-22 16:27:30

标签: c++ inheritance

在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"; }
};

3 个答案:

答案 0 :(得分:1)

通常,将参数传递给构造函数,因为参数的状态可用于初始化正在构造的对象的状态。同样适用于这种情况。

非常量引用参数可以(并且几乎总是)用于修改所引用的对象。

答案 1 :(得分:1)

  

在c ++中,为什么有理由将对基类的引用传递给派生类的构造函数?

通常有一个原因可以将对对象的引用传递给构造函数,而该对象类型是否与构造对象无关真的无关紧要-要构造该类型,您需要该对象的信息。使用左值引用而不是const可能意味着不良的设计或ctor将需要修改传递的对象或将非常量引用/指针保留给它。

答案 2 :(得分:0)

我认为问题是“为什么要通过基类引用而不是派生类引用?”。如果是这样,则传递Base&而不是Derived&的原因是,假设OtherDerived&继承了OtherDerived,则前者允许您传递Base引用。这被称为多态,在C ++中是相当重要的。

Here's几乎是相同的问题,只是功能而不是构造函数。