2017-07-08 70 views
-2

备注: 1)人是学生的基础班级 2)人员包含姓名作为唯一的数据变量 3)学生包含社会。该社团充当指向包含学生俱乐部名称的文本串的指针。如何使用构造函数初始化内存地址(指针变量)?

我理解第四行难度:

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

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

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

+0

新的结果是一个指针。指向人的指针可以用指向学生的指针来初始化。你的问题是什么? – Yunnosch

回答

2

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

new后的构造函数的调用是多么的C++语法new工程。该构造函数将被用来初始化堆上的对象。

+0

谢谢!我现在明白了 – Yin

0

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

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

+0

谢谢您的信息! – Yin

相关问题