-6

实现一个具有两个字段名称和年龄的类 Person 和一个具有三个字段的类 Car:

模型 指向所有者的指针 (a Person*)

指向驱动程序的指针(也是 Person*)

我正在编写一个程序,提示用户指定人和汽车。将它们存储在一个向量和一个向量中。遍历 Person 对象的向量并将它们的年龄增加一年。遍历汽车向量,打印出汽车型号、车主姓名和年龄、司机姓名和年龄。

这是我的代码到目前为止我需要一些关于程序的帮助我不知道这个程序中的错误是什么任何人都可以告诉我为什么它不显示任何输出。

#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 中返回名称,您可以在此处打印它。使字符串无效,并在 get_name() 中打印名称。所以而不是

cout<<driver->get_name();

你必须写

driver->getname(); 

所有者也一样。

于 2013-08-27T17:51:05.470 回答
0

您可以将增量或输出例程委托给std::for_each语句。for_each 将相同的操作应用于容器中的每个元素或选定的序列。看起来像:

void person_routine(Person* currentPerson)
{
    currentPerson->increment_age();
}

void cars_routine(Cars* currentCar)
{
    currentCar->print();
}

int main()
{
    std::vector<Person*> persons;
    std::vector<Cars*> cars;

    // fill both vectors

    for_each(persons.begin(), persons.end(), person_routine);
    for_each(cars.begin(), cars.end(), cars_routine);
}

请仔细检查您的代码并阅读您的编译器输出。您可能总是在http://cplusplus.com上阅读有关容器和算法的信息

于 2013-08-27T18:01:41.743 回答