您好,欢迎来到飒榕旅游知识分享网。
搜索
您的当前位置:首页发明python的动机之一

发明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运行时才动态的决定变量的类型,与之对应的是额外的开销

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- sarr.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务