注意: 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类型的对象一样初始化?
我知道我的观念有误,请帮我找出来:(
答案 0 :(得分:2)
发生的事情是对new
的调用在堆上分配一个Student
对象,然后返回一个指向它的指针。然后将该指针指定给p1
。所以p1
现在指向堆上的Student
对象。
new
之后的构造函数调用正是new
的C ++语法的工作原理。该构造函数将用于初始化堆上的对象。
答案 1 :(得分:0)
您在询问多态性。 您必须区分静态和动态类型。指针的静态类型在声明时指定。在这种情况下,静态类型的p1是Person。动态类型可以是静态类型的任何后代,并且可以在运行时定义,在您的示例中为Student。
您可以在此处找到一个很好的解释:https://stackoverflow.com/a/7649711/8244162