而这个output是在A()中调用的,所以this的静态类型为A *const,而output又不是虚函数,所以调用的就是A::output。。 不过,就算output加上virtual,调用的还是A类版本。。因为在构造函数中调用虚函数调用的一定是基类版本。。 [解决办法] 建议楼主先学习一下虚函数和多态性。 [解决办法] B b;构造对象b时候,根据继承性原理,先执行基类构造函数,此时对象未构造完成,只是基类部分构造完成了,所以this调用基类的方法; 如果整个对象都构造完成了,而且基类A的Out函数前有virtual关键字,且是 A* p = new B; p->Out(); 这样才可以实现多态方式 [解决办法] this表示当前类的实例的指针,也就是说你 this 在哪个类里,这里 this 就指向哪个类。例如当 this 写在 A类的函数里, this 指针就指向 A的实例;每个函数都隐藏着一个this指针,已经定义且初始化,所以不用定义不用初始化就能用,就是这个原因。所以你输出的结果是正确的。 [解决办法] 首先output不是virtual; 其次请参考《Effective C++》条目“不要在构造函数和析构函数中调用虚函数”,讲得比较明白。 [解决办法] vitual就对了。 [解决办法]