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

时间:2017-07-08 15:34:43

标签: c++

注意: 1)Person是Student的基类          2)Person包含name作为唯一的数据变量          3)学生包含社会。该社团充当指向包含学生俱乐部名称的文本字符串的指针。

我很难理解第四行:

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

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

我知道我的观念有误,请帮我找出来:(

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

您可以在此处找到一个很好的解释:https://stackoverflow.com/a/7649711/8244162