Страница 1 из 1
интеллектуальные указатели
Добавлено: 10 июн 2024, 15:50
ya
Код: Выделить всё
#include <iostream>
#include <vector>
#include <string>
#include <memory>
struct Person
{
std::string name;
int age;
void SetAge(int ageToSet)
{
age = ageToSet;
}
int GetAge() const
{
return age;
}
};
int main()
{
Person john{"John", 20};
Person mark{"Mark", 26};
Person dave{"Dave", 31};
std::vector<Person*> nameList{&john, &mark, &dave};
nameList[0]->SetAge(45);
std::cout << john.GetAge() << '\n';//Works, the pointer changed the value
}
Re: интеллектуальные указатели
Добавлено: 10 июн 2024, 15:55
ya
если по какой-то причине мне абсолютно необходимо было иметь объект, И мне нужно было передать его вектору, и я хотел, чтобы вектор модифицировал оригинал, тогда я бы использовал указатель, однако, поскольку мне не нужна эта функциональность, мы можем просто сделать это:
Код: Выделить всё
#include <iostream>
#include <vector>
#include <string>
class Person
{
public:
Person(const std::string& name, int age) : mName(name), mAge(age)
{}
std::string GetName() const
{
return mName;
}
int GetAge() const
{
return mAge;
}
void SetAge(int age)
{
if (age > 0 && age < 99)
{
mAge = age;
}
}
private:
std::string mName{};
int mAge{};
};
int main()
{
std::vector<Person> people;
// Constructing objects directly in the vector
people.emplace_back("Alice", 30);
people.emplace_back("Bob", 25);
people.emplace_back("Charlie", 35);
people[0].SetAge(45);
for (const auto& person : people)
{
std::cout << person.GetName() << " is " << person.GetAge() << " years old." << std::endl;
}
return 0;
}