如何通过另一个构造函数传递构造函数

时间:2013-09-04 16:25:49

标签: c++

我有课程日期和时间。我正在使用公共构造函数创建一个Onetime类,但我不确定如何创建新的日期和时间内联。

schedule[0]= new Onetime("see the dentist", 
  Date(2013, 11, 4), 
  Time(11, 30, 0), 
  Time(12, 30, 0));

class Onetime {
  public: 
    Onetime(  // what should I put here?  )
}

3 个答案:

答案 0 :(得分:5)

这是标准方法

class Onetime {
    std::string description;
    Date date;
    Time from_time;
    Time to_time;

    Onetime(const std::string& description,
            const Date& date,
            const Time& from_time,
            const Time& to_time)
    : description(description),
      date(date),
      from_time(from_time),
      to_time(to_time)
    {
       ... rest of initialization code, if needed ...
    }
  ...
};

答案 1 :(得分:2)

使用DateTimeconst Date &const Time &为日期和时间参数声明类。通常,const &适用于大型对象,以防止它们被不必要地复制。小对象可以使用const &或不使用,无论您喜欢哪种。

// Onetime.h

class Onetime {
  public: 
    Onetime(const std::string &description,
            const Date &date,
            const Time &startTime,
            const Time &endTime);

  private:
    std::string description;
    Date        date;
    Time        startTime, endTime;
};

然后在.cpp文件中定义构造函数。使用:表示初始化列表以初始化成员变量。

// Onetime.cpp

Onetime::Onetime(const std::string &description,
                 const Date &date,
                 const Time &startTime,
                 const Time &endTime)
    : description(description),
      date(date), startTime(startTime), endTime(endTime)
{
}

最后,您可以完全按照自己的意愿创建Onetime对象。如果您愿意,甚至可以省略new关键字。 new用于在堆上分配对象,在C ++中并不总是需要这样做(比如Java或C#,比如说)。

schedule[0] = new Onetime("see the dentist", 
  Date(2013, 11, 4), 
  Time(11, 30, 0), 
  Time(12, 30, 0));

答案 2 :(得分:1)

你可以,

class Onetime {
  public: 
    Onetime(const std::string& message, const Date& date, const Time& start, const Time& end);
  private:
    std::string m_message;
    Date m_date;
    Time m_start;
    Time m_end;
 }

Onetime::Onetime(const std::string& message, const Date& date, const Time& start, const Time& end)
: m_message(message), m_date(date), m_start(start), m_end(end) 
{

}

尽量避免使用new,因为这是堆分配的内存并且获取成本很高(与基于堆栈的内存相比)。