Объект внутри объекта в C++
В классе можно хранить объект другого класса. Сделаем пользователя с именем и городом, в котором он живет. Город опишем своим классом.
Вложенный объект создают в списке инициализации конструктора.
Запишем классы City и User:
#include <iostream>
#include <string>
class City {
public:
std::string name;
City(std::string name) : name(name) {}
};
class User {
public:
std::string name;
City city;
User(std::string name, City city) : name(name), city(city) {}
};
Создадим объект пользователя и выведем название его города:
int main() {
User user("john", City("Paris"));
std::cout << user.city.name << "\n";
return 0;
}
К вложенным полям обращаются цепочкой через точку.
Запишем классы City и User:
#include <iostream>
#include <string>
class City {
public:
std::string name;
City(std::string name) : name(name) {}
};
class User {
public:
std::string name;
City city;
User(std::string name, City city) : name(name), city(city) {}
};
Создадим объект и выведем имя пользователя и название города:
int main() {
User user("john", City("Paris"));
std::cout << user.name << "\n";
std::cout << user.city.name << "\n";
return 0;
}
Один объект City можно передать нескольким
пользователям - у каждого в поле будет копия
данных города. Запишем классы City
и User:
#include <iostream>
#include <string>
class City {
public:
std::string name;
City(std::string name) : name(name) {}
};
class User {
public:
std::string name;
City city;
User(std::string name, City city) : name(name), city(city) {}
};
Создадим двух пользователей с одним городом и выведем названия:
int main() {
City paris("Paris");
User u1("john", paris);
User u2("eric", paris);
std::cout << u1.city.name << "\n";
std::cout << u2.city.name << "\n";
return 0;
}
Сделайте класс Department с названием отдела.
Сделайте класс Employee с именем, должностью
и полем Department, которое инициализируют
в списке конструктора.
Создайте объект Employee и выведите
имя работника и название его отдела.
Сделайте класс Address с городом и улицей.
Сделайте класс Client с именем и полем
Address. Выведите улицу клиента одним
выражением через точку.