将客 2024-05-12 15:47 采纳率: 96.6%
浏览 1
已结题

关于#c++#的问题:这段代码为什么会在这一部分显示错误


#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;
  • 写回答

4条回答 默认 最新

  • 笑面虎 2024-05-12 15:48
    关注

    以下内容由CHATGPT及笑面虎共同生成、有用望采纳:


    【您想要解决的问题】:您提问的目的是想要了解为什么在尝试给Teacher_Cadre对象的成员变量赋值时,代码会报错。

    【问题出现原因】:在C++中,如果您想要通过对象来直接访问基类中的成员变量,这些变量必须是public的。在您提供的代码中,TeacherCadre类中的成员变量都是声明为protected的,而不是public。这意味着它们不能被派生类的外部代码直接访问。只有派生类内部才能直接访问这些protected成员,或者通过公共的成员函数来访问。

    【问题解决方案】:为了解决这个问题,您需要提供公共的setter函数(或者构造函数)来设置这些成员变量的值。这样,您就可以在main函数中通过这些公共函数来设置Teacher_Cadre对象的成员变量。

    【提供代码】:以下是修改后的代码,我添加了公共的setter函数来允许外部代码设置TeacherCadre的成员变量。

    #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
    

    【推荐相关链接】:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月20日
  • 已采纳回答 5月12日
  • 创建了问题 5月12日

悬赏问题

  • ¥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 数据包 大概什么价