【问题标题】:Implement a class Person with two fields name and age, and a class Car with three fields [closed]实现一个具有两个字段名称和年龄的类 Person,以及一个具有三个字段的类 Car [关闭]
【发布时间】:2013-08-27 17:33:09
【问题描述】:

实现一个类 Person 有两个字段 name 和 age,一个类 Car 有三个字段:

型号 指向所有者的指针(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;
}

【问题讨论】:

  • 正确缩进你的代码,看在上帝的份上,告诉我们你的程序实际做了什么,而不是你想要它做什么。
  • 帮助我们大家一点:编译错误?运行时错误?请详细一点...
  • 这就是全部代码吗?我没有看到主要的。如果你想让它们运行,你必须从某个地方调用这些函数......
  • “请告诉我为什么它不显示任何输出” - 因为你不打印任何东西?
  • 养成使用构造函数初始化列表的习惯。

标签: c++ pointers


【解决方案1】:

回答您的具体问题:您没有打印任何内容。

将此添加到您的代码中

for (vector<Car*>::const_iterator iter = cars.begin(); iter != cars.end(); ++iter)
    (*iter)->print();

【讨论】:

    【解决方案2】:

    您可以直接在 get_name 中打印它,而不是在 get_name 中返回名称。 使字符串无效,并在 get_name() 中打印名称。 所以不是

    cout<<driver->get_name();
    

    你必须写

    driver->getname(); 
    

    所有者也一样。

    【讨论】:

      【解决方案3】:

      您可以将增量或输出例程委托给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

      上阅读有关容器和算法的信息

      【讨论】:

        猜你喜欢
        • 2015-09-26
        • 1970-01-01
        • 1970-01-01
        • 2016-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-01
        相关资源
        最近更新 更多