Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpOpObCV 35 of 150 menu
◀ ▶

Копия объекта и копия указателя в C++

При присваивании объектов компилятор копирует поля в новый экземпляр - получаются два независимых значения.

Запишем класс User с именем и возрастом:

#include <iostream> #include <string> class User { public: std::string name; int age; User(std::string name, int age) : name(name), age(age) {} };

Создадим два объекта, скопируем один в другой и выведем оба имени:

int main() { User user1("john", 30); User user2 = user1; user2.name = "eric"; std::cout << user1.name << "\n"; std::cout << user2.name << "\n"; return 0; }

При присваивании указателей копируется только адрес - обе переменные ведут к одному объекту в памяти. Запишем класс User:

#include <iostream> #include <string> class User { public: std::string name; int age; User(std::string name, int age) : name(name), age(age) {} };

Создадим два указателя на один объект, изменим поле и выведем имя:

int main() { User user("john", 30); User* a = &user; User* b = a; b->name = "eric"; std::cout << a->name << "\n"; std::cout << user.name << "\n"; return 0; }

Тот же объект может лежать в векторе, а адрес на него - в отдельном указателе. Запишем класс User:

#include <iostream> #include <vector> class User { public: int age; User(int age) : age(age) {} };

Создадим вектор, изменим возраст через указатель и выведем его:

int main() { std::vector<User> people; people.push_back(User(20)); User* p = &people[0]; p->age = 25; std::cout << people[0].age << "\n"; return 0; }

Создайте объект Employee и скопируйте его в вторую переменную. Измените зарплату у копии. Выведите зарплату из исходной переменной.

Создайте объект Employee, запишите его адрес в два указателя. Измените имя через второй указатель. Выведите имя через первый указатель.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить