#c #constructor
#c #конструктор
Вопрос:
Я практикую перегрузки конструктора. Я узнал, что конструктор может быть перегружен несколько раз, но когда я пытаюсь, он говорит: «Конструктор не может быть повторно объявлен». В чем может быть проблема? Если я удаляю один из конструкторов, он запускается. Должен ли я добавить деструктор или что мне делать?
#include <iostream>
#include <sstream>
using namespace std;
class Cat
{
private:
string name;
string breed;
int age;
int weight;
public:
Cat(string newName, string newBreed, int newAge, int newWeight)
{
name = newName;
breed = newBreed;
age = newAge;
weight = newWeight;
}
Cat(string nName, string nBreed, int nAge, int nWeight)
{
name = nName;
breed = nBreed;
age = nAge;
weight = nWeight;
}
string toString()
{
stringstream ss;
ss << "Name - ";
ss << name << endl;
ss << "Breed - ";
ss << breed << endl;
ss << "Age - ";
ss << age << endl;
ss << "Weight - ";
ss << weight << endl;
cout << ss.str() << endl;
return ss.str();
}
};
int main()
{
Cat a("Illidan", "Maine-Coon", 2, 12);
a.toString();
Cat b("Sammy", "Turkish Angora", 2, 8);
b.toString();
}
Комментарии:
1. Имя параметров не имеет значения. Оба ваших конструктора имеют подпись
Cat(string, string, int, int)
. Вы не можете этого сделать.2. Они могут быть перегружены , что означает, что у вас может быть несколько конструкторов с разными сигнатурами. У ваших такая же подпись.
3. О, теперь я понимаю. спасибо 🙂
4. Что ж, спросите себя, чего вы ожидали от дублирующего конструктора, чего не было в первом конструкторе. Если это разные имена, то вам нужно было бы написать тысячи конструкторов, если не миллионы из них, только потому, что имя параметров изменилось. И ты же знаешь, что это не имеет смысла, верно?