В этой программе есть две функции с именем display, каждая из которых манипулирует различными типами данных, которые становятся объектами main.
#include<string>
#include<iostream>
#include<vector>
using namespace std;
class Hat {
private:
string type;
char size;
public:
void display();
Hat(string type, char size);
};
Hat::Hat(std::string _type, char _size):
type(_type),
size(_size)
{
}
void Hat::display()
{
cout << "Hat type : " << size << endl; //arrows wrong way
cout << "Hat size : " << type << endl; //missing ending cout <<
}
class Person {
public:
string name;
unsigned int idNum;
Hat myHat;
void display();
Person(string,char,string,int);
};
Person::Person(string _name, char hat_size, string hat_type, int _idNum):
name(_name), idNum(_idNum),
myHat(hat_type,hat_size)
{
}
void Person::display()
{
cout << "Given name : " << name << endl;
cout << "Id. number : " << idNum << endl;
}
int main()
{
Person personA("Alice",'M',"Trilbee",12321);
Person personB("Bob",'S',"Ferret",2324);
personA.display();
personB.display();
return 0;
}
Ожидаемый результат этой программы будет
Given name : Alice
Id. number : 12321
Hat type : Beret
Hat size : M
Given name : Bob
Id. number : 2324
Hat type : S
Hat size : Trilby
Но вместо этого получается
Given name : Alice
Id. number : 12321
Given name : Bob
Id. number : 2324
Объекты, объявленные в main, используемые для доступа к функции отображения, только доступ к той, которая найдена в классе лиц, а не в классе шляпы, и я не знаю почему.