C+多态性载体+; 我试图在C++语言中进行多态性。我的父类是Person,然后有一个派生类叫做Student。这是我的个人.h和.cpp: class Person { public: Person(string name); virtual void display() const; string get_name() const; void set_name(string name); string get_birthDay() const; void set_birthDay(string birthDay); private: string name; string birthDay; }; class Student : public Person { public: Student(string name, string major); virtual void display() const; string get_major() const; void set_major(string major); private: string major; };
.cpp: .cpp:C+多态性载体+; 我试图在C++语言中进行多态性。我的父类是Person,然后有一个派生类叫做Student。这是我的个人.h和.cpp: class Person { public: Person(string name); virtual void display() const; string get_name() const; void set_name(string name); string get_birthDay() const; void set_birthDay(string birthDay); private: string name; string birthDay; }; class Student : public Person { public: Student(string name, string major); virtual void display() const; string get_major() const; void set_major(string major); private: string major; };,c++,pointers,vector,polymorphism,C++,Pointers,Vector,Polymorphism,.cpp: .cpp: Student::Student(字符串名称,字符串专业) :人(姓名) { 这个->专业=专业; } 字符串Student::get_major()常量 { 返回专业; } 无效学生::设置_专业(字符串专业) { 这个->专业=专业; } void Student::display()常量 { cout您的人员列表存储指针,但您按下了对象: 要解决您的问题,请执行以下操作: person_list.push_back(new Student("Student","IT
Student::Student(字符串名称,字符串专业)
:人(姓名)
{
这个->专业=专业;
}
字符串Student::get_major()常量
{
返回专业;
}
无效学生::设置_专业(字符串专业)
{
这个->专业=专业;
}
void Student::display()常量
{
cout您的人员列表存储指针,但您按下了对象:
要解决您的问题,请执行以下操作:
person_list.push_back(new Student("Student","IT"));
//^^^^
person_list.push_back(new Instructor("Instrructor", 2500));
要在STL容器中存储指针,最好使用智能指针:
#include <memory>
std::vector <std::unique_ptr<Person>> person_list;
#包括
std::矢量人_列表;
您的人员列表存储指针,但您按下了对象:
要解决您的问题,请执行以下操作:
person_list.push_back(new Student("Student","IT"));
//^^^^
person_list.push_back(new Instructor("Instrructor", 2500));
要在STL容器中存储指针,最好使用智能指针:
#include <memory>
std::vector <std::unique_ptr<Person>> person_list;
#包括
std::矢量人_列表;
您需要向后推一个指向学生的指针;即使用
人员列表。向后推(新学生(“学生”、“IT”);
等
但是您需要非常小心地使用内存,因为您需要删除已分配的内存;向量在销毁时不会为您执行此操作
考虑改用智能指针。您需要将指针推回学生;即使用
人员列表。向后推(新学生(“学生”、“IT”);
等
但是您需要非常小心地使用内存,因为您需要删除已分配的内存;向量在销毁时不会为您执行此操作
考虑改用智能指针。cout-display()cout-display(),我以前尝试过,但错误消息仍然与我看到的讲师构造函数相同?讲师::讲师(字符串名称,浮动工资):个人(名称){this->salary=salary;}但目前我们的教学大纲只在这里完成。在进入另一个阶段之前,我需要确保我理解这一点。您也在讲师面前添加了新的内容,如我的示例代码所示?我以前尝试过这一点,但错误消息仍然是samecan I see讲师构造函数?讲师::讲师(字符串名称,浮动工资):Person(name){this->salary=salary;}但目前我们的教学大纲只在这里完成。我需要确保在进入另一个阶段之前理解这一点。您也在讲师面前添加了新的内容,如我的示例代码所示?@Gwen:“这不能解决问题”:你在那一行得到的错误消息是什么?@Gwen你确定你没有编译该文件的旧版本吗?它对我有效:你所说的不编译该文件的旧版本是什么意思?无意中编译了一个未修复的源代码版本。Bathsheba提出的更改与我的答案结合在一起确实有效。请参阅链接。别担心,我会再次尝试从头开始重新创建和重新编码。我稍后会给你回复on@Gwen:“这并不能解决问题”:你在那一行得到的错误消息是什么?@Gwen你确定你没有编译该文件的旧版本吗?它对我有效:你所说的不编译该文件的旧版本是什么意思?无意中编译了一个未修复的源代码版本。Bathsheba提出的更改与我的答案结合在一起确实有效。请参阅链接。别担心,我会再次尝试重新创建和重新编码。稍后我会给你回复
#include <memory>
std::vector <std::unique_ptr<Person>> person_list;
cout << person_list[count]->display() << endl;