发明python的动机之一

   最近几天看了一些关于C++动态转换的语法,终于理解了历史上程序员发明python的动机之一

   C++中只有指针和引用具有多态性,多态性是面向对象编程的好处之一。

   如果一个类ClassA(继承于ClassB)是从栈上分配的,比如ClassA  a;那么基类ClassB b = a;会造成数据截断损失,而从堆区分配的指针则不会,比如ClassB *b= new ClassA(),可以通过动态转换dynamic_cast转回派生类。(以前以为指针是因为堆区比较大才用的,现在才发现好像多态性才是最关键的)还有返回从堆区分配的指针可以防止对象被析构是内存空间的释放,这点在多线程编程中尤为重要,栈上分配的变量如果传给另一个线程,运行中释放掉空间很容易造成程序崩溃

   而某些函数由于设计需要,必须返回基类的信息,所以应该返回基类的指针。

   举个例子:

#include <iostream>
using namespace std;
class Father
{
public:
	Father() {}
	virtual ~Father() { cout << "Father has been deconstructed" << endl; }
};

class Child :public Father
{
public:
	Child(){}
	virtual ~Child() {}
	int get5() { return 5; }
};

Father *GetPaticificateChild()
{
	return new Child();
}

int main()
{
	Father *fa = GetPaticificateChild();
	fa->get5();//错误,提示Father类没有该方法
	Child *ch = dynamic_cast<Child*>(fa);
	if (ch != NULL)
		cout << ch->get5() << endl;
	
	return 0;
}

虚函数和虚表给了子类改变指向父类的指针运行虚函数的方式机会。运行时根据虚表里的内容决定实际执行的虚函数内容,虚表应该大多也放在数据段里。

因此可能python的发明者将之归结为C++编译功能的问题,所以设计了一个处处都是多态的python

当使用python实现上述功能时就没有任何问题,返回值可以直接调用方法,python运行时才动态的决定变量的类型,与之对应的是额外的开销

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值