这段时间去了好多公司面试,几种语言总在不停的切换使用,从中发现不少问题。 在C++中,有如下代码:
#include <iostream>
using namespace std;
class A
{
public:
A()
{
Print();
}
void virtual Print();
};
void A::Print()
{
cout<<"A";
}
class B:public A
{
public:
B()
{
}
void Print()
{
cout<<"B";
}
};
int main()
{
B *b=new B();
A *a=static_cast<A*>(b);
a->Print();
return 0;
}
当动态开辟B对象时会先调用基类A的构造函数,此时A的构造函数调用函数Print,那就遇到一个问题,A调用的是A自己的Print,还是B的,运行结果运行的是A自己的,在类型转换后,指针a调用的是B的Print
当换成C#后,源代码如下:
class A
{
public A()
{
Print();
}
public void virtual Print()
{
Console.Write("A");
}
}
class B:A
{
public B()
{
}
public overide void Print()
{
Console.Write("B");
}
}
int main()
{
B b=new B();
return 0;
}
这段代码的运行结果是B,也就是调用的Print函数是B里面的
这两段的内部运行原理待解决?