Animal(string name) : m_name(name)
{
}
virtual string MakeSound() = 0;
string GetName()
{
return m_name;
}
};
struct Dog : public Animal
{
Dog(string name) : Animal(name)
{
}
// Copy assignment operator
void operator=(const Dog &D)
{
m_name = std::string{"Small_dog"};
}
string MakeSound() override
{
return "woof-woof!";
}
};
int main()
{
Dog dog = Dog("BIG_dog");
cout << dog.GetName() << " is barking: ";
cout << dog.MakeSound() << endl;
Dog dog2 = dog; // <- тут не срабатывает присваивание, а используется имя Big_dog.
// dog2 = dog; <- если не вставить эту строку, то не срабатывает оператор присваивания. почему?
cout << dog2.GetName() << " is barking: ";
cout << dog2.MakeSound() << endl;
return 0;
}
Строчка вида Object obj1 = obj2 вызывает конструктор копирования, а не оператор присваивания, оператор присваивания вызовется если объект уже был создан ранее. Тоже в своё время не сразу разобрался
Стикер
https://godbolt.org/z/rTzrjs6vK stack bufferoverf
Обсуждают сегодня