C ++ объект типа class, имеющий доступ только к одной функции печати - PullRequest
1 голос
/ 30 апреля 2020

В этой программе есть две функции с именем 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, используемые для доступа к функции отображения, только доступ к той, которая найдена в классе лиц, а не в классе шляпы, и я не знаю почему.

1 Ответ

2 голосов
/ 30 апреля 2020

Вам необходимо явно вызвать display функцию-член вашего Hat класса (myHat) в Person::display(). Попробуйте это:

void Person::display()
{
    cout << "Given name : " << name << endl;
    cout << "Id. number : " << idNum << endl;
    myHat.display();
}

После этого результат будет:

Given name : Alice
Id. number : 12321
Hat type   : M
Hat size   : Trilbee
Given name : Bob
Id. number : 2324
Hat type   : S
Hat size   : Ferret
...