C ++包含基类/派生类对象的数组

时间:2014-05-30 18:12:16

标签: c++ arrays

我正在尝试在这里完成一项任务并且卡在一点上。问题是使用Student派生类创建Person类。然后重载两个<<和>>运营商。最后创建检查程序以创建20个人的数组并继续加载Person或Student。在任何时候我们都可以打印我们目前所拥有的内容 - 人员输出为Name char* / Age int / Parents *char[2],学生输出为Name char* / Age int / {{ 1}}。

我的问题在于数组点 - 我无法弄清楚如何实现这一点,现在我坚持:

  • 指向人的指针数组
  • 我们选择其人/学生
  • istream获取数据

这是主要代码部分:

ID int

我可以加载第一个人/学生,然后代码中断而不会出错。 所以我在这里问的是,你能看一下代码,并指出我的方向正确吗?

免责声明:我们必须使用数组,没有矢量等。是的,conio.h也存在,它必须保持...显然我是初学者。

人:

#include <iostream>
#include <conio.h>
#include "Header.h"
using namespace std;
int main()

{
    char choice;
    Person* Tablica[20];
    Person* temp;
    int i = 0;
    while (1)
    {
        cout << "choices:" << endl;
        cout << "(p)erson, (s)tudent, s(h)ow, (e)nd" << endl;
        choice = _getch();
        if (choice == 'h' || choice == 'H'){
            for (int n = 0; n < i; n++){
                cout << *Tablica[n] << endl;
            }
        }
        if (choice == 'e' || choice == 'E'){ break; }
        if (choice == 'p' || choice == 'P'){
            temp = new Person;
            cin >> *temp;
            Tablica[i] = temp;
            cout << *Tablica[i] << endl;
            i++;
        }
        if (choice == 'S' || choice == 's'){
            temp = new Student;
            cin >> *temp;
            Tablica[i] = temp;
            cout << *Tablica[i] << endl;
            i++;
        }
    }
    system("PAUSE");
    return 0;
}

#include <iostream>

class Person
{
public:
    Person();
    Person(const Person&);
    Person(char* n, int a, char* Parent1, char* Parent2);
    char* getName();
    int getAge();
    char* getDad();
    char* getMum();
    virtual ~Person();
    virtual Person operator=(const Person &);
    virtual Person operator+(const Person &);
    virtual Person operator+=(Person &);
    virtual void write(std::ostream&);
    virtual void read(std::istream&);
    friend std::istream& operator>>(std::istream&, Person &);
    friend std::ostream& operator<<(std::ostream&, Person &);
protected:
    char* name;
    int age;
    char* ParentName[2];
};

class Student : public Person
{
public:
    Student();
    Student(const Student&);
    Student(char* name, int age, int id);
    virtual ~Student();
    int ident();
    Student operator=(const Student &);
    Student operator+(const Student &);
    Student operator+=(Student &);
    virtual void write(std::ostream&);
    virtual void read(std::istream&);
    friend std::istream& operator>>(std::istream&, Student &);
    friend std::ostream& operator<<(std::ostream&, Student &);
private:
    int ID;
};

1 个答案:

答案 0 :(得分:1)

这会编译吗?

Table[i] = *temp;

Table是指向Person

的指针数组

temp是指向Person

的指针

您正在尝试将对象放入包含指针的数组中。解除引用*temp会给你一个对象 - 你需要一个指向对象的指针,所以不要在那里取消引用它。我希望编译器能够抱怨......是吗?

另外,请检查您的第二个if声明 - 它是(choice == 'S' || choice == 'p'),这可能不是您的意思。如果选择==&#39; p&#39; ...

,两个if块都会执行

Person::read()中,您只为名称分配了一个字符。这很可能会结束......