C++继承和python继承不同点

作者在 2011-09-09 08:44:32 发布以下内容

class A
{
public:
void f1()
{
cout << "A.f1()" << endl;
}

void f()
{
f1();
//f3();
}
};

class B:public A
{
void f1()
{
cout << "B.f1()" << endl;
}
void f3()
{
cout << "B.f3()" << endl;
}
};

B b;
b.f();
输出为A.f1(),也就是说执行的是基类中的f1()函数。如果python中实现相同的代码如下:
class A:
def f1(self):
print "A.f1";
def f(self):
self.f1();
#self.f3();

class B(A):
def f1(self):
print "B.f1";
#A.f1(self);
def f3(self):
print "B.f3";
b = B();
b.f();
运行输出却为B.f1

总结如下:
在C++中,public继承表明A是B的一部分,在调用f()时,先在B类中找这个函数,没有找到,到A类中找这个函数,找到调用A类中的这个函数,此时传入的this指针被转化为了A类对象的指针,这个时候的调用,找寻函数都只会在A类的范围中,不会跳出A类。所以调用f1这个函数的时候是调用A类中的f1。
在python中,父类和子类不是C++中父类和子类的关系。可以将B类理解成是一个全新的类,只是说,这个类会包含A类的成员。而A类和B类都有f1这个函数,这个时候B类中定义的f1函数会将A类中定义的f1函数给覆盖掉。所以在调用f()函数时,f函数内部实际上调用的还是B类中重新定义的f1函数。

默认分类 | 阅读 1382 次
文章评论,共1条
beyondyf
2011-09-25 11:46
1
python没用过,不便评论。但就继承这一块在面向对象的概念中是相通的。C++是通过虚函数来实现超类对子类方法的调用的。
游客请输入验证码
文章分类