如何使用构造函数初始化内存地址(指针变量)?

How can a memory address (pointer variables) be initialized using constructor?

本文关键字:指针 变量 地址 何使用 构造函数 初始化 内存      更新时间:2023-10-16

注:1(人是学生的基础班 2( 人包含名称作为唯一的数据变量 3(学生包含社会。社团充当指向文本字符串的指针,该字符串包含学生俱乐部的名称。

我很难理解第四行:

int main (){
Person* p1;
p1=new Student("John", "Drama Society");   //This line
delete p1;
}

p1 不是指向堆中内存地址的人指针吗?据我所知,指针变量只是内存中的一个 32 位或 64 位(取决于系统(的位置。 如何像 Person 类型的对象一样初始化它?

我知道我的概念是错误的,请帮我找出来:(

正在发生的事情是,对new的调用在堆上分配一个Student对象,然后返回指向它的指针。 然后,将该指针分配给p1。 因此,p1现在指向堆上的Student对象。

new之后的构造函数调用就是new的C++语法的工作方式。 该构造函数将用于初始化堆上的对象。

你问的是多态性。 您必须区分静态类型和动态类型。指针的静态类型在声明中指定。在本例中,p1 的静态类型为 Person。动态类型可以是静态类型的任何后代,并且可以在运行时定义,在您的示例中为 Student。

你可以在这里找到一个很好的解释:https://stackoverflow.com/a/7649711/8244162