子类中能否存储另一个子类的vector?C++代码求助
问题解答
首先明确:完全可以在Major这个子类中存储Student子类的vector,你的设计逻辑没问题,代码跑不起来是因为几个语法和细节错误,逐个给你揪出来:
代码里的错误点
- 变量名写错:main函数最后一行调用的
folder.print(std::cout);,但你定义的对象是major,应该改成major.print(std::cout); - 流输出方式错误:Major的print函数里,你直接用
os << this->students[i],但Student类没有重载operator<<,没法直接用流输出对象,应该调用Student自己的print方法,改成this->students[i].print(os); - 缺失必要头文件:代码里用到了
std::string、std::vector、std::ostream,必须在开头加上三个头文件:#include <iostream>、#include <string>、#include <vector>,否则编译器找不到这些标准库类型 - 可选优化(非必须):Major的构造函数可以用const引用传递vector,避免不必要的拷贝,把参数改成
const std::vector<Student>& students
修正后的完整代码
#include <iostream> #include <string> #include <vector> class University { public: virtual void print(std::ostream& os) = 0; virtual ~University() = default; }; class Student : public University { std::string studentName; public: Student(std::string studentName) : studentName(studentName) {} void print(std::ostream& os) override { os << this->studentName << std::endl; } }; class Major : public University { std::vector<Student> students; public: Major(const std::vector<Student>& students) : students(students) {} void print(std::ostream& os) override { for(size_t i = 0; i < this->students.size(); ++i){ this->students[i].print(os); } } }; int main(){ Student student1("Mark"); Student student2{"Tom"}; Student student3{"Donald"}; Student student4{"Duck"}; std::vector<Student> students {student1, student2, student3, student4}; Major major{students}; major.print(std::cout); }
内容的提问来源于stack exchange,提问作者TheArd
相关产品推荐
相关产品推荐

