初始化构造函数c ++

时间:2014-10-08 12:07:14

标签: c++ constructor

#include <iostream>
using namespace std;

class DrivingLicence

{

protected:

    Person owner;
    char * type;
    Date validity;
    int id;
    static int cid;

public:

    DrivingLicence(Person &o,char* t,Date &d);
    DrivingLicence(Person &o,char* t);
    DrivingLicence(const DrivingLicence & other);
    Date getValidity() const;
    int checkValidity() const;
    void print() const;
    bool operator== (const DrivingLicence& o) const;
    void operator +(const int num);
    const DrivingLicence& operator= (const DrivingLicence& other);
    ~DrivingLicence();
};

class Person

{

private:
    int id;
    char* name;
    Date birthday;

public:

    Person(char* name,int id1,Date &d);
    Person(const Person &other);
    ~Person();
    Date getBirthday() const;
    const Person& operator= (const Person & other);
    void print() const;
};

class Date
{
    int day;
    int month;
    int year;

public:

    Date (int day,int month,int year);
    ~Date();
    const Date& operator=(const Date& other);
    bool operator==(const Date & other);
    void print() const;
    int getYear()const;
    int getMonth()const;
    int getDay()const;
};

以上是我的课程, 我需要初始化DrivingLicence类中的两个构造函数(不是复制缺点),但是我无法做到这一点。

有人可以帮我解决这个问题的语法吗?

我的意思是:

#include <NameOfHeaderFile>
DrivingLicense::DrivingLicense( Person &o,char* t,Date &d ) : //Code here for 1stconstructor
{

}
DrivingLicense::DrivingLicense( Person &o,char* t ) ://Code here for 2nd constructor
{

}

我不知道如何初始化值

4 个答案:

答案 0 :(得分:0)

我认为这是一个头文件,但通常每个.h文件只有一个类。因此,您需要创建一个名为DrivingLicence.cpp的文件。

在此文件中写:

#include <NameOfHeaderFile>
DrivingLicense::DrivingLicense( Person &o,char* t,Date &d )
{
     //Code here for 1stconstructor
}
DrivingLicense::DrivingLicense( Person &o,char* t )
{
     //Code here for 2nd constructor
}

这就是你要问的???

答案 1 :(得分:0)

如果我理解了你的问题,你需要一个DriverLicence构造函数 还会初始化DriverLicense实例中的人员。

如果是这样,您只需将此重载添加到您的班级:

DriverLicense::DriverLicense(
    // Data for Person
    char *person_name, int person_id, Date day_birth,
    // Data for Driver licence
    char *t, Date d)
{
    owner = Person(person_name, person_id, day_birth); 



    // More code here initializing DeriverLicence members.
}

记住当然要把它添加到你的班级:

class DriverLicence
{
public:
    // ...
    DriverLicense::DriverLicense(char *, int, Date, char *t, Date d);
   // ...
}

一些建议:

  1. 您正在使用C ++,请使用std:string代替char*
  2. 不要滥用传递参数作为参考。有时这不是 最好的事情。

答案 2 :(得分:0)

如果您尝试使用传递给构造函数的参数初始化DrivingLicense类的成员,则可以在初始化列表中执行此操作。

将这些定义放在cpp中是明智的。还要注意对类型和常量的更改或我提供的参数。

DrivingLicense::DrivingLicense(const Person &o, const std::string& t, const Date &d )
  : owner(o)
  , type(t)
  , validity(d)
{ }

DrivingLicense::DrivingLicense(const Person &o, const std::string& t)
  : owner(o)
  , type(t)
{ } // Note that 'validity' here is default constructed.

答案 3 :(得分:0)

包括&#34; header.h&#34;

int DrivingLicence :: cid = 1000;

DrivingLicence :: DrivingLicence(Person&amp; o,char * t,Date&amp; d):owner(o),type(t),validity(d) {

}

DrivingLicence :: DrivingLicence(Person&amp; o,char * t):owner(o),type(t),validity(8,10,2024){}

这就是我的意思。 谢谢你的所有答案。