-6

name と age の 2 つのフィールドを持つクラス Person と、3 つのフィールドを持つクラス Car を実装します。

モデル 所有者へのポインター (Person*)

ドライバーへのポインター (Person* でもあります)

ユーザーに人と車を指定するように求めるプログラムを書いています。それらをベクトルとベクトルに格納します。Person オブジェクトのベクトルをトラバースし、年齢を 1 年増やします。車のベクトルをトラバースし、車のモデル、所有者の名前と年齢、およびドライバーの名前と年齢を出力します。

これはこれまでの私のコードです。プログラムについて助けが必要です。このプログラムのエラーがわかりません。出力が表示されない理由を教えてください。

#include <iostream>
#include <string>
#include <vector>

using namespace std;

class Person
{
  private:
  string name;
  int age;
  public:
  Person(string n, int a);
  string get_name()const;
  int get_age()const;
  void increment_age();
  void print()const;
};

Person::Person(string n, int a)
{ 
  name = n;
  age = a;
}

string Person::get_name() const
{
  return name;
}

void Person::increment_age()
{
  age += 1;
}

void Person::print() const
{
  cout << name << endl;
  cout << age << endl;
}


class Car
{
 private:
  string model;
  Person *owner;
  Person *driver;

 public:
  Car(string m);
  void set_driver(Person* p);
  void set_owner(Person* p);
  void print()const;
}; 


Car::Car(string m)
{
  model = m;
}

void Car::set_driver(Person* p)
{
  driver = p;
}

void Car::set_owner(Person* p)
{
  owner = p;
}

void Car::print() const
{
  cout << model << endl;
  cout << driver->get_name() << endl;
  cout << owner->get_name() << endl;
}



int main()
{ 
  vector<Person*> people;

  const int PERSON_SZ = 4;
  char * names[] = {"Jim", "Fred", "Harry", "Linda"};
  int ages[] = { 23, 35, 52, 59 };

  for (int i = 0; i < PERSON_SZ; i++)
  {
    Person *a = new Person(names[i], ages[i]);
    people.push_back(a);
  }

  vector<Car*> cars;
  const int CAR_SZ = 3;
  char * models[] = { "Festiva", "Ferrarri", "Prius" };

  for (int i = 0; i < CAR_SZ; i++)
  {
    Car *c = new Car(models[i]);
    c->set_driver(people[rand()% (people.size())]);
    c->set_owner(people[rand()% (people.size())]);
    cars.push_back(c);
  }

  return 0;
}
4

3 に答える 3

1

特定の質問に答えるには:何も印刷していません。

これをコードに追加します

for (vector<Car*>::const_iterator iter = cars.begin(); iter != cars.end(); ++iter)
    (*iter)->print();
于 2013-08-27T17:37:37.977 に答える
0

get_name で name を返す代わりに、その場で表示できます。文字列を無効にし、get_name() で名前を出力します。だから代わりに

cout<<driver->get_name();

あなたは書かなければならないでしょう

driver->getname(); 

所有者も同様。

于 2013-08-27T17:51:05.470 に答える