C ++,将对象作为参数传递给另一个对象构造函数

Posted

技术标签:

【中文标题】C ++,将对象作为参数传递给另一个对象构造函数【英文标题】:C++, Passing an object as a parameter in anothers object constructor 【发布时间】:2020-05-10 19:43:39 【问题描述】:

我在 3 个文件中有 3 个类。

Fecha.h Horario.h Recordatorio.h

我希望能够创建一个新的 Recordatorio 类,其中包含 Fecha 和 Horario 类。

这是我在 main 中的功能:

Recordatorio recordatorio(Fecha(5, 10), Horario(9, 0), "Clase Algo2");

注意:Fecha(5,10) 和 Horario(9,10) 工作正常。

这是我的 Recordatorio.cpp 中的代码:

#include "Recordatorio.h"
#include "Fecha.h"
#include "Horario.h"
#include <iostream>
#include <string>

using namespace std;

Recordatorio::Recordatorio(Fecha fecha, Horario horario, string mensaje)
    fecha_ = fecha;
    horario_ = horario;
    mensaje_ = mensaje;


void Recordatorio::mensaje()
    cout << mensaje_ << endl;

这在我的 Recordatorio.h 中:

#ifndef RECORDATORIO_H
#define RECORDATORIO_H
#include "Fecha.h"
#include "Horario.h"
#include <string>

class Recordatorio

    public:
        Recordatorio(Fecha fecha, Horario horario, std::string mensaje);
        void mensaje();

    private:
        Fecha fecha_;
        Horario horario_;
        std::string mensaje_;

;

#endif // RECORDATORIO_H

我在 Recordatorio.cpp 中遇到的错误如下:

错误:没有匹配的函数调用 'Fecha::Fecha()'

编辑:Fecha.h

#ifndef FECHA_H
#define FECHA_H

using uint = unsigned int;

class Fecha
    public:
        Fecha(uint mes,uint dia);
        uint mes();
        uint dia();
    void incrementar_dia();
    private:
        uint mes_;
        uint dia_;
;

#endif // FECHA_H

Fecha.cpp

#include "Fecha.h"

uint dias_en_mes(uint mes) 
    uint dias[] = 
        // ene, feb, mar, abr, may, jun
        31, 28, 31, 30, 31, 30,
        // jul, ago, sep, oct, nov, dic
        31, 31, 30, 31, 30, 31
    ;
    return dias[mes - 1];


uint Fecha::mes() 
    return mes_;


uint Fecha::dia() 
    return dia_;


Fecha::Fecha(uint dia, uint mes)
    dia_ = dia;
    mes_ = mes;


void Fecha::incrementar_dia()
    uint maximo_dia_mes = dias_en_mes(mes_);
    if (dia_ < maximo_dia_mes)
        dia_++;
     else 
        dia_ = 1;
        if (mes_ != 12)
            mes_++;
         else 
            mes_ = 1;
        
    
    return;

Horario.h:

#ifndef HORARIO_H
#define HORARIO_H

using uint = unsigned int;

class Horario

    public:
        Horario(uint hora, uint min);
        uint hora();
        uint min();
    private:
        uint hora_;
        uint min_;
;

#endif // HORARIO_H

Horario.cpp:

#include "Horario.h"

using uint = unsigned int;

Horario::Horario(uint hora, uint min)
    hora_ = hora;
    min_ = min;


uint Horario::hora() 
    return hora_;


uint Horario::min() 
    return min_;

【问题讨论】:

你能包含 Fecha 类的代码吗?从错误消息中,我认为它不是默认可构造的。 为你的构造函数使用一个初始化列表,那么它不需要是默认可构造的。 已编辑。 @PeteFordham,你能举个例子吗? 编辑并添加了两个类@Philipp Claßen 你有一个答案,我只是补充一点,以提高内存效率,将你的对象作为 const 引用传递,例如Recordatorio(const Fecha &amp; fecha, const Horario &amp; horario, const string &amp; mensaje)。这会保存一份副本。 【参考方案1】:
Recordatorio::Recordatorio(Fecha fecha, Horario horario, string mensaje) :
    fecha_(fecha),
    horario_(horario),
    mensaje_(mensaje) 

这现在将为您的类使用默认的复制构造函数,而不是构造一个空对象然后分配它。

【讨论】:

以上是关于C ++,将对象作为参数传递给另一个对象构造函数的主要内容,如果未能解决你的问题,请参考以下文章

当我们将对象作为参数传递给方法时,为啥会调用复制构造函数?

如何将 unique_ptr 对象作为参数传递给作为库的类

将 ListBox 控件对象传递给需要 ListBox 作为参数的函数

C ++将一个对象传递给另一个对象?

将数组从另一个类的构造函数传递给类函数

如何将向量作为参数传递给另一个向量?