指定同一类时,上层类和继承类之间的差异 当我亲自研究C++时,我怀疑如何将指针分配给类。例如: 43 int main () { 44 View *window = new View ("window"); 45 Render *renderer; // why Render(upper class) points subclass and it works? 46 renderer = new Print; 47 renderer->draw (window); // this renderer works like Print function. why? 48 49 //what are the difference between up and down? 50 Print *a; 51 a = new Print; 52 a->draw (window); 53 return 0; 54 }

指定同一类时,上层类和继承类之间的差异 当我亲自研究C++时,我怀疑如何将指针分配给类。例如: 43 int main () { 44 View *window = new View ("window"); 45 Render *renderer; // why Render(upper class) points subclass and it works? 46 renderer = new Print; 47 renderer->draw (window); // this renderer works like Print function. why? 48 49 //what are the difference between up and down? 50 Print *a; 51 a = new Print; 52 a->draw (window); 53 return 0; 54 },c++,class,variable-assignment,C++,Class,Variable Assignment,请注意,Render是类,Print是Render的子类。然而,正如您在第46行中看到的,上层类指向子类,并且它可以正常工作 因此,我还尝试指向Print类并调用第52行中的draw函数。它工作正常 我不知道它们之间有什么区别,也不知道为什么它在没有错误或警告的情况下工作。如果实例化继承的类,它的基对象也会被实例化。这是多态性。我想你应该通读一遍。你可以将父类的引用引用到子类的对象。使用此引用,您只能调用父类知道的那些函数,即仅调用父类中存在的那些方法 通过使用父类的引用,该引用也可以引用任何其

请注意,
Render
是类,
Print
Render
的子类。然而,正如您在第46行中看到的,上层类指向子类,并且它可以正常工作

因此,我还尝试指向
Print
类并调用第52行中的
draw
函数。它工作正常


我不知道它们之间有什么区别,也不知道为什么它在没有错误或警告的情况下工作。

如果实例化继承的类,它的基对象也会被实例化。这是多态性。我想你应该通读一遍。

你可以将父类的引用引用到子类的对象。使用此引用,您只能调用父类知道的那些函数,即仅调用父类中存在的那些方法


通过使用父类的引用,该引用也可以引用任何其他子类对象。

之所以有效,是因为
Print
Render
的一个子类,而

Render->draw(窗口)
有效地调用了
Print::draw
,因为
Render::draw
是一个虚拟函数。如果它没有声明为
virtual
,则会调用
Render::draw


区别在于,即使
渲染器
指向
打印
,也不能将
渲染器
存储在
std::vector
中。另一个区别是,
Print
可能隐藏
Render
的方法。在
a
中,隐藏方法不像在
renderer

中那样容易访问。您正在声明一个指向
Render
的指针,并将在堆上创建的
Print
对象的地址分配给它。由于
Print
源自
Render
,因此这是一项合法转让


编译器只将
renderer
视为
Render
对象,因此查找
Render
对象以找到
draw()
方法。

它工作,因为这是语言的设计方式。这应该在任何介绍性C++书籍中被覆盖。请注意,您有内存泄漏:每个
新建
都需要一个
删除
。这是多态性。那么是否发生了任何类型的分配警告?例如,它看起来像
int*a分配<代码>a=浮动b这是不同的,因为
打印
是从
渲染
继承的,因此它们是相关的
int
float
不相关。此外,在我看来,你们并没有真正理解指针。我无法理解相关的概念。最后一个问题,我理解这是一个很傻的问题,因为它的地址大小。建议是抓取一本优秀的C++初学者的书,仔细阅读继承章节。谢谢你的帮助。您的注释该引用可以引用任何其他子类对象,也意味着变量
渲染器
可以指向任何其他子类?我感谢您的帮助。这对我帮助很大!