You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Exercise 3代码问题反馈:C++类继承相关代码异常求助

排查你的C++类继承代码问题

我帮你梳理了这段代码里的几个关键问题,一个个拆解来看:

  • set_data函数中strcpy参数顺序完全颠倒
    你现在写的是strcpy(b,name);,但strcpy的规则是「目标地址在前,源地址在后」——这里你本来是想把传入的名字复制到Animal类的name成员里,所以正确写法应该是strcpy(name, b);。原来的写法会把未初始化的name数组内容(随机垃圾值)复制到参数b里,不仅逻辑全错,还会触发未定义行为。

  • message_zebra函数的输出语句语法不完整
    你写的cout<< "The zebra named "<< name <<" is "<< age << " years old....缺少了闭合的双引号和语句结束的分号,正确的完整写法是:

    cout << "The zebra named " << name << " is " << age << " years old." << endl;
    
  • 字符串参数的安全性优化建议
    函数set_data的参数char b[10]在实际调用时会退化为char*,如果传入字符串字面量(比如"Ziggy"),编译器大概率会抛出警告——因为字符串字面量是const类型的。建议把参数改成const char* b更规范。另外,name是长度为10的char数组,直接用strcpy如果传入的名字超过9个字符(要留一个位置存字符串结束符'\0')会导致缓冲区溢出,改用strncpy并手动添加结束符会更安全;或者直接用std::string代替char数组,既省心又能避免这类问题。

修正后的完整代码示例

#include <iostream>
#include <cstring>
using namespace std;

class Animal {
protected:
    int age;
    char name[10];
public:
    // 修正strcpy顺序,同时把参数改为const char*
    void set_data(int a, const char* b) {
        age = a;
        // 使用strncpy避免缓冲区溢出,手动补全结束符
        strncpy(name, b, sizeof(name) - 1);
        name[sizeof(name) - 1] = '\0';
    }
};

class Zebra: public Animal {
public:
    void message_zebra() {
        // 补全输出语句的引号和分号
        cout << "The zebra named " << name << " is " << age << " years old." << endl;
    }
};

// 测试用主函数
int main() {
    Zebra z;
    z.set_data(5, "Ziggy");
    z.message_zebra();
    return 0;
}

如果换成std::string的版本会更简洁安全,这里也给你参考:

#include <iostream>
#include <string>
using namespace std;

class Animal {
protected:
    int age;
    string name;
public:
    void set_data(int a, const string& b) {
        age = a;
        name = b;
    }
};

class Zebra: public Animal {
public:
    void message_zebra() {
        cout << "The zebra named " << name << " is " << age << " years old." << endl;
    }
};

int main() {
    Zebra z;
    z.set_data(5, "Ziggy");
    z.message_zebra();
    return 0;
}

内容的提问来源于stack exchange,提问作者Fornax-A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:14:13