cout << "name = " << name << endl;
cout << "color = " << color << endl;
cout << "age = " << age << endl;
}
void set_name(string a)
{
name = a;
}
void set_color(string a)
{
color = a;
}
void set_age(int a)
{
age = a;
}
void operator=(string name)
{
set_name(name);
}
};
class cat : public animal
{
public:
void speak() override
{
cout << "meow!" << endl;
}
cat():animal()
{
}
cat(string name):cat()
{
set_name(name);
}
cat(string name, string color):cat(name)
{
set_color(color);
}
cat(string name, string color, int age):cat(name, color)
{
set_age(age);
}
};
int main()
{
cat a;
a = ("Tom"
return 0;
}
Не наследуется оператор. в строке a = ("Tom" компилятор пишет что нет подходящей функции, хотя она описана в родительском классе. если реализую оператор= в классе cat то все работает
a = string("Tom" И это ВСЁ, что надо поменять в твоём коде, чтобы он заработал.
Ты пытаешься присвоить не string, а *char. А операции присваивания для указателя на символ у тебя нет.
Ваша проблема связана с тем, как работает механизм наследования операторов в C++. Оператор присваивания (operator=) не наследуется автоматически, если он не является виртуальным. В вашем случае, вы определили оператор присваивания в базовом классе animal, но он не доступен для объектов класса cat, потому что компилятор не знает, что вы хотите использовать оператор присваивания из базового класса. #include <iostream>
using namespace std;
class animal {
string name;
string color;
int age;
public:
virtual void speak() = 0;
animal() {
name = "none";
color = "none";
age = 0;
}
// Перегрузка оператора присваивания для объекта cat
cat& operator=(const cat& other) {
if (this != &other) { // Проверка на самоприсвоение
// Здесь можно добавить код для копирования свойств
// Например, если бы у вас были публичные методы доступа
// set_name(other.get_name());
// set_color(other.get_color());
// set_age(other.get_age());
}
return *this;
}
};
int main() {
cat a;
a = ("Tom" // Использует оператор из animal
return 0;
}