#include <iostream> #include <string> #include <cstdio> using namespace std; class Person { public: string name,addr,tel; int age; char sex; Person( string name_,int age_,char sex_,string addr_,string tel_ ) :name(name_),age(age_),sex(sex_),addr(addr_),tel(tel_){ } virtual void setTel(string newTel){ tel=newTel; } virtual void setAddr(string newAddr){ addr=newAddr; } }; class Student:public Person { public: string major; Student( string name_,int age_,char sex_,string addr_,string tel_,string major_ ) :Person( name_,age_,sex_,addr_,tel_ ),major(major_){} }; class Cadre:public Person { public: string post; Cadre( string name_,int age_,char sex_,string addr_,string tel_,string post_ ) :Person( name_,age_,sex_,addr_,tel_ ),post(post_){} }; class Student_Cadre:public Student,public Cadre { public: float wage; Student_Cadre( string name_,int age_,char sex_,string addr_,string tel_,string major_,string post_,float wage_ ) :Student( name_, age_, sex_, addr_, tel_, major_ ), Cadre( name_, age_, sex_, addr_, tel_, major_, post_),wage(wage_){} void display() { cout<<"name:"<<name<<endl; cout<<"age"<<age<<endl; cout<<"sex:"<<sex<<endl; cout<<"address:"<<addr<<endl; cout<<"tel:"<<tel<<endl; cout<<"major:"<<major<<endl; cout<<"post:"<<post<<endl; cout<<"wages:"<<wage<<endl; } }; int main( ) { string name, major, post, addr, tel; int age; char sex; float wage; cin>>name>>age>>sex>>addr>>tel>>major>>post>>wage; Student_Cadre st_ca(name, age, sex, addr, tel, major, post,wage); st_ca.display( ); cout<<endl; string newAddr, newTel1, newTel2; cin>>newAddr>>newTel1>>newTel2; // st_ca.setAddr(newAddr); // st_ca.Student::setTel(newTel1); // st_ca.Cadre::setTel(newTel2); st_ca.display( ); return 0; }
时间: 2024-04-27 22:22:27 浏览: 178
这是一个 C++ 程序,包含了多重继承和虚函数的使用。
程序中定义了一个 `Person` 类,包含了个人的基本信息;`Student` 类和 `Cadre` 类分别继承了 `Person` 类,表示学生和干部的信息;`Student_Cadre` 类同时继承了 `Student` 类和 `Cadre` 类,表示既是学生又是干部的人的信息,同时增加了一个 `wage` 成员变量表示工资。
在 `main` 函数中,首先输入一个学生干部的信息,然后调用 `display` 函数输出该人的信息。接着输入一个新的地址和两个新的电话号码,将这些新的信息设置给该人,并再次调用 `display` 函数输出该人更新后的信息。
需要注意的是,在 `Person` 类中定义了虚函数 `setTel` 和 `setAddr`,在 `Student_Cadre` 类中没有覆盖这些虚函数,因此需要通过类名限定的方式来调用 `Student` 类和 `Cadre` 类中的这些函数。具体来说,可以将注释去掉,将 `main` 函数中的三行代码取消注释即可。
相关问题
4 IntelliSense: 没有与这些操作数匹配的 "<<" 运算符 操作数类型为: std::ostream << std::string f:\cpp_program\Polymorphic_call\Polymorphic_call\polymorach.cpp 13 8 Polymorphic_call 但是显示这个报错,如何解决
这个报错是因为在代码中使用了cout,但是没有包含iostream头文件。请确保在代码中包含`#include <iostream>`这一行,以便引入iostream库并使用cout。修改后的代码应该如下所示:
```cpp
#include <iostream>
#include <string>
using namespace std;
class Person {
public:
Person(const char* name): _name(name)
{
}
// 虚函数
virtual void BuyTicket()
{
cout << _name << "Person:买票-全价 100¥" << endl;
}
protected:
string _name;
// int _id;
};
```
这样修改后,应该能够成功编译和运行代码。
阅读全文