我正在尝试在这里完成一项任务并且卡在一点上。问题是使用Student派生类创建Person类。然后重载两个<<和>>运营商。最后创建检查程序以创建20个人的数组并继续加载Person或Student。在任何时候我们都可以打印我们目前所拥有的内容 - 人员输出为Name char*
/ Age int
/ Parents *char[2]
,学生输出为Name char*
/ Age int
/ {{ 1}}。
我的问题在于数组点 - 我无法弄清楚如何实现这一点,现在我坚持:
这是主要代码部分:
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;
};
答案 0 :(得分:1)
这会编译吗?
Table[i] = *temp;
Table
是指向Person
temp
是指向Person
您正在尝试将对象放入包含指针的数组中。解除引用*temp
会给你一个对象 - 你需要一个指向对象的指针,所以不要在那里取消引用它。我希望编译器能够抱怨......是吗?
另外,请检查您的第二个if
声明 - 它是(choice == 'S' || choice == 'p')
,这可能不是您的意思。如果选择==&#39; p&#39; ...
if
块都会执行
在Person::read()
中,您只为名称分配了一个字符。这很可能会结束......