c++;为什么要将对基类的引用传递给派生类的构造函数 C++中有一个RESon,为什么你要把一个基类的引用传递给派生类的构造函数?你为什么要这么做

c++;为什么要将对基类的引用传递给派生类的构造函数 C++中有一个RESon,为什么你要把一个基类的引用传递给派生类的构造函数?你为什么要这么做,c++,inheritance,C++,Inheritance,以下是一个基本示例: #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

以下是一个基本示例:

#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"; }
};
#包括
使用名称空间std;
阶级基础
{
int x;
公众:
虚拟void fun()=0;
int getX(){return x;}
};
//此类从基继承并实现fun()
派生类:公共基
{
int-y;
公众:
派生(基础和对象);

void fun(){cout通常,参数会传递给构造函数,因为参数的状态可用于初始化正在构造的对象的状态。这种情况也适用

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

C++中有一个原因,你为什么要把一个基类的引用传递给派生类的构造器?


通常,对对象的引用会传递给构造函数有一个原因,不管该对象类型是否与constructed one相关——要构造此类型,您需要该对象的信息。使用左值引用而不是const one可能意味着糟糕的设计或constructed需要修改传递的对象或者保持非常量引用/指针指向它。

我认为问题是“为什么要传递基类引用而不是派生类引用?”如果是这样的话,代码< >基础>和<代码>,而不是<代码>派生和<代码>,是前者允许您通过<代码> Atdidio and < /Cord>引用,假定<代码> Atdidio < /C> >继承<代码> BASE>代码>。这称为多态性,是C++中的一个很好的东西。
几乎是同一个问题,但使用的是函数而不是构造函数。

您是否在某个地方找到了这样的代码,并想知道他们为什么这样做?如果您这样做,代码可能会有一些上下文来解释他们为什么这样做。否则,我们只能猜测他们为什么提供了构造函数。显然传入的
对象
实例是d与当前正在构造的实例不同,因此这里的构造函数可能会调用传入的实例上的方法,以获取当前实例构造中使用的信息。您是否希望我们只是列出一个原因列表,说明一个人为什么会假设要这样做?这会很长,而且其中许多都是特定的fic.谢谢你,你是说传递
Base&
的原因是,如果你需要的话,它为你将来传递对任何派生类的引用提供了灵活性?是的,这就是想法