class Person { public: void showInfo(); public: char* _name; //姓名 char* _sex; //性别 int _age; //年龄 }; void Test() { Person man; //定义 man._name = "jack"; man._age = 10; man._sex = "男"; man.showInfo(); }错误原因,如何修改
时间: 2024-03-25 13:37:31 浏览: 101
这段代码的错误原因是 `_name` 和 `_sex` 是 `char*` 类型,而没有为它们分配内存空间,因此在给它们赋值时会导致内存访问错误。
为了修复这个问题,可以将 `_name` 和 `_sex` 改为 `std::string` 类型,这样就不需要手动分配内存空间了。另外,在 `showInfo` 方法中,需要使用 `std::cout` 输出对象的属性值。
修复后的代码如下:
```
#include <iostream>
#include <string>
class Person {
public:
void showInfo() {
std::cout << "姓名:" << _name << std::endl;
std::cout << "性别:" << _sex << std::endl;
std::cout << "年龄:" << _age << std::endl;
}
public:
std::string _name; //姓名
std::string _sex; //性别
int _age; //年龄
};
void Test() {
Person man; //定义
man._name = "jack";
man._age = 10;
man._sex = "男";
man.showInfo();
}
```
相关问题
class Person { public: void showInfo(); public: char _name[5]; //姓名 char _sex[5]; //性别 int _age; //年龄 }; void Test() { Person man; //定义 man._name = "jack"; man._age = 10; man._sex = "男"; man.showInfo(); }错误的原因,如何修改
这段代码的错误原因是 `_name` 和 `_sex` 是字符数组,长度为5,但是在给它们赋值时使用了字符串常量,长度超过了5,导致内存越界,可能会导致程序崩溃或其他不可预测的行为。
为了修复这个问题,可以将 `_name` 和 `_sex` 的长度增加到可以存储所需字符串的最大长度。另外,在给它们赋值时,可以使用 `strcpy` 函数或者 `std::string` 类型的赋值操作符。
修复后的代码如下:
```
#include <iostream>
#include <cstring>
class Person {
public:
void showInfo() {
std::cout << "姓名:" << _name << std::endl;
std::cout << "性别:" << _sex << std::endl;
std::cout << "年龄:" << _age << std::endl;
}
public:
char _name[20]; //姓名
char _sex[5]; //性别
int _age; //年龄
};
void Test() {
Person man; //定义
strcpy(man._name, "jack");
man._age = 10;
strcpy(man._sex, "男");
man.showInfo();
}
```
或者使用 `std::string` 类型:
```
#include <iostream>
#include <string>
class Person {
public:
void showInfo() {
std::cout << "姓名:" << _name << std::endl;
std::cout << "性别:" << _sex << std::endl;
std::cout << "年龄:" << _age << std::endl;
}
public:
std::string _name; //姓名
std::string _sex; //性别
int _age; //年龄
};
void Test() {
Person man; //定义
man._name = "jack";
man._age = 10;
man._sex = "男";
man.showInfo();
}
```
lass Worker { public: //显示个人信息 virtual void showInfo() = 0; //获取岗位名称 virtual string getDeptName() = 0; int m_Id = 0; //职工编号 string m_Name; //职工姓名 int m_DeptId = 0; //职工所在部门名称编号 };这段代码中为啥要用虚函数
这段代码中使用虚函数是为了实现多态性,让不同的子类可以重写基类的虚函数,从而实现不同的功能。在这个例子中,由于不同的职工可能有不同的个人信息和岗位名称,因此需要使用虚函数来实现不同的子类重写基类的函数,以满足不同职工的需求。
阅读全文