2016-02-29 6 views
-5

Я хочу создать объект из другого класса внутри класса, но мой конструктор принимает пользовательский ввод для инициализации объекта.Инициализация объекта класса внутри другого класса с использованием конструктора с пользовательским вводом

Это мой файл заголовка:

class assignment { 
private: 
    int assignment1; 
    int assignment2; 
    int assignment3; 
public: 
    assignment(int a1, int a2, int a3); 
}; 

class marks { 
private: 
    assignment Assg; //object in class 
public: 
    marks(); 
}; 

И моя функция определения:

assignment::assignment(int a1, int a2, int a3) :assignment1(a1), assignment2(a2), assignment3(a3) { 
    cout << "Initializer list Assignment constructor invoked" << endl; 
} 

Я не знаю, как создать конструктор для marks, так что я могу инициализировать assignment Assg. Кроме того, где взять пользовательский ввод для назначений 1, 2 и 3?

+2

где взять пользовательский ввод -> зависит от приложения – MikeCAT

ответ

0

Вам нужно написать конструктор для меток, который принимает три целых значения и передает их в конструктор присваивания.

marks::marks(int a1, int a2, int a3) : Assg(a1, a2, a3) {} 

Или вы могли бы написать сеттер, чтобы установить значение присваивания впоследствии (но это будет нарушать инкапсуляцию)

class assignment { 
private: 
    int assignment1; 
    int assignment2; 
    int assignment3; 
public: 
    assignment(int a1, int a2, int a3); 

    void setAssignments(int a1, int a2, int a3) { assignment1 = a1, ... } 
}; 

А также в баллах

class marks { 
private: 
    assignment Assg; //object in class 
public: 
    marks(); 
    void setAssignments(int a1, int a2, int a3) { Assg.setAssignments(a1, a2, a3); } 
}; 
1

Вы можете использовать список инициализаторов членов для инициализации Assg.

// mean that a1 = 1, a2 = 2, a3 = 3 
marks::marks(): Assg(1, 2, 3) {} 
0

Так как вы говорите, вы хотите, чтобы пользовательский ввод ... Это единственный способ:

class marks { 
private: 
    assignment Assg; //object in class 
public:  
    marks(int a1, int a2, int a3) : Assg(a1, a2, a3) 
    { 

    } 
}; 

Или вы можете добавить конструктор, который принимает 0 параметров на вашем assignment классе и добавить FUNC «создать», или «инициализировать», так что вы можете инициализировать объект позже (в противном случае вы вынуждены инициализировать его с помощью member initializer list)

Как

class assignment { 
private: 
    int assignment1; 
    int assignment2; 
    int assignment3; 
public: 
    assignment(int a1, int a2, int a3) : { Create(a1, a2, a3); } 
    assignment() { assignment1 = assignment2 = assignment3 = 0; } 
    void Create(int a1, int a2, int a3); 
}; 

class marks { 
private: 
    assignment Assg; //object in class 
public:  
    marks() 
    { 
     Assg.Create(1, 2, 3); 
    } 
}; 
Смежные вопросы