C++虚函数和C#虚函数的区别

c#不了解。但是关于c++的说法,这样是不对的。题主你其实纠结的不是语言,而是an implementation of c++.意思是,之所以会有上面的结果,是因为你的编译器的实现。在c++标准里面,对于virtual 的具体实现没有做任何要求。而virtual method table只是大多数编译器的实现。因为标准没有做要求,具体的细节上,每个编译器是可以不同的。而Virtual在标准里面,设计者不是希望使用者去思考怎么implement 它的,而是希望使用者对它的理解是这样:不考虑pure virtual .base中声明了一个Virtual 函数,非pure virtual,所以这个函数必须要有定义。从base class的reference或者pointer,你只能访问到base的成员!!但是,如果这个reference或者pointer,真实的类型是一个子类的。子类中,只要出现了相同函数(不包括返回值)的定义,那么它override了自己的base的virtual function!!所以,设计者,希望你认为的是,call的还是base class里面的成员!只是,这个成员被override了。而不是希望你去考虑,这个背后的实现。


    推荐阅读