#include <iostream>
using namespace std;
// 基类 Teacher
class Teacher {
protected:
string name;
int age;
string sex;
string address;
string phone;
string title; // 教师特有的数据成员
public:
void display() {
cout << "Name: " << name << endl;
cout << "Age: " << age << endl;
cout << "Sex: " << sex << endl;
cout << "Title: " << title << endl;
cout << "Address: " << address << endl;
cout << "Phone: " << phone << endl;
}
};
// 基类 Cadre
class Cadre {
protected:
string post; // 干部特有的数据成员
public:
// 假设有一个显示职务的成员函数
void showPost() {
cout << "Post: " << post << endl;
}
};
// 派生类 Teacher_Cadre
class Teacher_Cadre : public Teacher, public Cadre {
private:
double wages; // 教师兼干部特有的数据成员
public:
void show() {
// 调用 Teacher 类的 display 函数
display();
// 由于 showPost 是 Cadre 类的成员函数,需要使用作用域解析符
Cadre::showPost();
// 输出工资
cout << "Wages: " << wages << endl;
}
};
// 主函数
int main() {
Teacher_Cadre tc;
tc.name = "John Doe";
tc.age = 40;
tc.sex = "Male";
tc.address = "123 Main St";
tc.phone = "555-1234";
tc.title = "Associate Professor";
tc.post = "Department Head";
tc.wages = 85000.00;
// 显示教师兼干部的信息
tc.show();
return 0;
}
这段代码为什么会在这一部分显示错误
tc.name = "John Doe";
tc.age = 40;
tc.sex = "Male";
tc.address = "123 Main St";
tc.phone = "555-1234";
tc.title = "Associate Professor";
tc.post = "Department Head";
tc.wages = 85000.00;
关于#c++#的问题:这段代码为什么会在这一部分显示错误
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- 笑面虎 2024-05-12 15:48关注
以下内容由CHATGPT及笑面虎共同生成、有用望采纳:
【您想要解决的问题】:您提问的目的是想要了解为什么在尝试给
Teacher_Cadre
对象的成员变量赋值时,代码会报错。【问题出现原因】:在C++中,如果您想要通过对象来直接访问基类中的成员变量,这些变量必须是
public
的。在您提供的代码中,Teacher
和Cadre
类中的成员变量都是声明为protected
的,而不是public
。这意味着它们不能被派生类的外部代码直接访问。只有派生类内部才能直接访问这些protected
成员,或者通过公共的成员函数来访问。【问题解决方案】:为了解决这个问题,您需要提供公共的setter函数(或者构造函数)来设置这些成员变量的值。这样,您就可以在
main
函数中通过这些公共函数来设置Teacher_Cadre
对象的成员变量。【提供代码】:以下是修改后的代码,我添加了公共的setter函数来允许外部代码设置
Teacher
和Cadre
的成员变量。#include <iostream> using namespace std; class Teacher { // ... (其他代码保持不变) public: void setName(string n) { name = n; } void setAge(int a) { age = a; } void setSex(string s) { sex = s; } void setAddress(string ad) { address = ad; } void setPhone(string p) { phone = p; } void setTitle(string t) { title = t; } void display() { // ... (display函数保持不变) } }; class Cadre { // ... (其他代码保持不变) public: void setPost(string pst) { post = pst; } void showPost() { // ... (showPost函数保持不变) } }; class Teacher_Cadre : public Teacher, public Cadre { // ... (其他代码保持不变) public: void setWages(double w) { wages = w; } void show() { // ... (show函数保持不变) } }; int main() { Teacher_Cadre tc; tc.setName("John Doe"); tc.setAge(40); tc.setSex("Male"); tc.setAddress("123 Main St"); tc.setPhone("555-1234"); tc.setTitle("Associate Professor"); tc.setPost("Department Head"); tc.setWages(85000.00); tc.show(); return 0; }
【代码运行方式】:这段代码可以在任何支持C++的编译器上编译和运行,比如GCC或Clang。您可以将代码复制到文本编辑器中,保存为
.cpp
文件,然后在命令行中使用编译器编译并运行。【代码预期运行结果】:
Name: John Doe Age: 40 Sex: Male Title: Associate Professor Address: 123 Main St Phone: 555-1234 Post: Department Head Wages: 85000
【推荐相关链接】:
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥30 模拟电路 logisim
- ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
- ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
- ¥15 安装quartus II18.1时弹出此error,怎么解决?
- ¥15 keil官网下载psn序列号在哪
- ¥15 想用adb命令做一个通话软件,播放录音
- ¥30 Pytorch深度学习服务器跑不通问题解决?
- ¥15 部分客户订单定位有误的问题
- ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
- ¥15 Bug traq 数据包 大概什么价