```cpp People *p = new People("王志刚", 23); p -> display(); p = new Teacher("赵宏佳", 45, 8200); p -> display();```
时间: 2024-03-26 20:34:23 浏览: 86
这段代码是一个简单的 C++ 多态示例,定义了一个基类 `People` 和一个派生类 `Teacher`,其中 `Teacher` 继承了 `People`。
在 `main()` 函数中,首先创建了一个基类指针 `p`,并将其指向一个 `People` 类型的对象,然后调用 `display()` 函数显示该对象的信息。接着,将 `p` 指向一个 `Teacher` 类型的对象,并再次调用 `display()` 函数显示该对象的信息。由于 `Teacher` 类继承了 `People` 类,因此可以通过基类指针来访问 `Teacher` 类的成员函数。
输出结果为:
```
王志刚今年23岁了,是个无业游民。
赵宏佳今年45岁了,是一名教师,每月有8200元的收入。
```
相关问题
```cpp int main() { People* p = new People("王志刚", 23); // p原本为基类的指针 p->display(); p = new Teacher("赵宏佳", 45, 8200); // 将派生类指针幅值给p p->display(); return 0; }```
您的这段代码演示了如何使用多态(Polymorphism)实现基类指针指向派生类对象,调用派生类中的方法。
在您的代码中,`People` 类是一个基类,`Teacher` 类是 `People` 类的派生类。`People` 类中有一个虚函数 `display()`,`Teacher` 类继承了 `People` 类,并重写了其虚函数 `display()`。
在 `main()` 函数中,首先创建了一个 `People` 类型的指针 `p`,指向一个 `People` 类型的对象,然后调用 `display()` 方法。接着,将 `p` 的指向修改为 `Teacher` 类型的对象,并再次调用 `display()` 方法,此时将会调用 `Teacher` 类中重写的 `display()` 方法。
以下是您的代码的完整示例:
```cpp
#include <iostream>
using namespace std;
class People {
public:
string name;
int age;
virtual void display() {
cout << "My name is " << name << ", I am " << age << " years old." << endl;
}
People(string _name, int _age) {
name = _name;
age = _age;
}
};
class Teacher : public People {
public:
int salary;
void display() {
cout << "My name is " << name << ", I am " << age << " years old. My salary is " << salary << " RMB." << endl;
}
Teacher(string _name, int _age, int _salary) : People(_name, _age) {
salary = _salary;
}
};
int main() {
People* p = new People("王志刚", 23); // p原本为基类的指针
p->display();
p = new Teacher("赵宏佳", 45, 8200); // 将派生类指针幅值给p
p->display();
return 0;
}
```
输出结果为:
```
My name is 王志刚, I am 23 years old.
My name is 赵宏佳, I am 45 years old. My salary is 8200 RMB.
```
cpp代码People::People(char* name, int age) : m_name(name), m_age(age) {} 后面People* p = new People("王志刚", 23);为什么报错?
这段代码可能报错的原因有很多,没有具体的错误信息很难确定。但是,根据代码片段来看,有可能出现以下几个问题:
1. 在使用 char* 类型作为字符串时,需要保证字符串以 '\0' 结尾。如果 name 没有以 '\0' 结尾,就会导致出现未知错误。
2. 如果 m_name 是一个 const char* 类型,那么需要使用字符串常量来初始化它,而不能使用 char* 类型的指针变量。
3. 如果 m_name 是一个 std::string 类型,那么需要将 char* 类型转换为 std::string 类型。
4. 如果 m_age 是一个 const int 类型,则需要在构造函数初始化列表中进行初始化,因为 const 类型的成员变量无法在构造函数中赋值。
总之,需要进一步分析具体的错误信息才能确定问题所在。
阅读全文