派生类中用::操作符调用父类函数,this指针传递的是谁的?
出门没有编译器,在线的又打不开,忽然想起一个问题,求大哥们帮助~
主要代码如下:
class base
{
public:
base(){a = 10};
~base();
int a;
virtual void f1()
{
cout << "base f1" << endl;
cout << a << endl;
f2();
}
virtual void f2()
{
cout << "base f2" << endl;
}
}
class child:public base
{
public:
child(){a= 20};
~child();
int a;
virtual void f1()
{
cout << "child f1" << endl;
base::f1();
}
virtual void f2()
{
cout << "child f2" << endl;
}
}
main
{
base* pBase = new child;
pBase.f1();
return;
}
上边程序的执行结果是什么?(没有编译器直接在帖子上敲的,头文件没写,有点编译小错难免,见谅。。)
其实我主要想问的是:base::f1();传入f1的this指针是父类的还是之类的?
执行bae::f1时,函数中输出的a 和 f2()是父类的a还是类的a? 是父类的f2还是子类的f2?
[解决办法]
这里传的应该是child的类型。
这里应用了c++面向对象的多态机制。
还有,这里有个小错误,就是child和base中都有一个public成员叫int a;这里名字冲突了。