2014-10-08 5 views
1
#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 классе (не копия) минусы, однако я не могу управлять, чтобы сделать это.инициализации конструктора C++

Может кто-нибудь, пожалуйста, помогите мне с синтаксисом для этого вопроса ??

, что я имею в виду:

#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

Дайте ему попробовать? Для меня совершенно непонятно, с чем вы столкнулись. – nvoigt

+0

Инициализировать конструктор? Вы не инициализируете конструкторы ... конструкторы инициализируют экземпляры классов (или, по крайней мере, они должны это делать). – luk32

+0

Почему вы используете 'char *' в C++? Если это строка, используйте 'std :: string'. – crashmstr

ответ

0

включают "header.h"

INT DrivingLicence :: CID = 1000;

DrivingLicence :: DrivingLicence (Person & о, символ * т, Дата & d): владелец (о), тип (т), справедливость (d) {

}

DrivingLicence :: DrivingLicence (Лицо & o, char * t): владелец (o), тип (t), срок действия (8,10,2024) {}

Это то, что я имел в виду. спасибо за ответы.

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 
} 

Это то, что вы спрашиваете ???

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:stringchar*
  2. Не злоупотребляйте передаваемыми аргументами в качестве ссылок. Несколько раз это не лучшее, что нужно сделать.
+0

Я ценю ваш ответ, плохо дайте ему попробовать – Daniel

+0

Я пробовал свой синтаксис, но все же у меня есть проблема с компиляцией « IntelliSense: нет экземпляра перегруженной функции« DrivingLicence :: DrivingLicence »соответствует указанному типу. Btw Я использую char * intetionaly for practice. – Daniel

+0

Не можете ли вы показать нам, что проблема с компиляцией? –

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. 
+0

Большое спасибо, что сработало отлично. Я понял проблему – Daniel

+0

Рад, что я мог помочь вам разобраться. – Aesthete

Смежные вопросы