作者
朱并作
责编
刘静
说起C++,我想在大多数程序员心里的第一印象是非常复杂的,C++的学习曲线是非常陡峭的。
我自己在学习C++的过程中也花费了很多的时间。个人认为造成C++陡峭的学习曲线的原因之一就是国内对C++的功能特性翻译的反人类。
这些反人类的翻译严重挑战了我对生活常识的理解。而我个人总是喜欢把复杂的概念都转换成方便理解的生活常识。
下面的一些概念是我自己在学习C++中碰到的一些难以理解的概念,这些概念其实也不复杂,个人拙见是名词翻译的不准确造成的。
我们来一起看下这些让C++难以理解的反人类翻译.
反人类翻译之一:构造函数
应该改名为:初值函数。构造函数的最主要的作用无非是给成员变量赋初值。当然也可以在里面加一条cout输出。但主要的功能就是赋初值。其实你可以把这个过程想象成一群小朋友进入一个大的教师要准备开始做手工了,要正式开始做手工前,总得告诉这群小朋友每个人一个最初的座位号吧。给初值就是构造函数的主要工作了。
1classTime2{3public:4Time(intn):num(n){}5private:6intnum;7};
析构函数改为清扫函数
这一大群小朋友做完收工后,教室里脏兮兮,乱糟糟的。不能就这么久走了吧。总得把教室打扫干净再走才行。析构函数就是用来做“清理善后”的工作(例如在建立对象时用new开辟了一片内存空间,delete会自动调用析构函数后释放内存)。
C++当中的析构函数格式如下:
classTime{public:~Time(){}};
另外关于析构函数的执行顺序可以这么理解。这个教室是长方形的,每排只能坐一个人。进来这个教室的时候得让坐最里面的小朋友先进,打扫卫生的时候,得最后进来的小朋友先打扫,然后后面的跟着一个个打扫。
这样看来,所有小朋友进来坐位置的顺序是:E-D-C-B-A。
而打扫卫生的顺序就是:A→B→C→D→E
函数重载和运算符重载也需要改
重载这个词真不知哪位大仙创造出来的,记得当初学C++的时候被这么逆天的词吓了一大跳。感觉又是一块难啃的骨头来了。函数的重载应该改为函数的同名异类。打个比方ABCDE这5个小朋友,真名都叫“小明”,但A小明,擅长打球,以后班上有打球的活就找A小明了。B小明擅长画画,以后班上有画画的事就找B小明了。C小明擅长弹琴,以后班上弹琴的事就找C小明了。运算符重载就该改成运算符的同名异类。同一个名字的运算符完成了几种工作。
函数重载举列:
intMax(int,int);//返回两个整数的最大值;intMax(constvectorint);//返回vector容器中的最大值;intMax(constmatrix);//返回matrix引用的最大值;
运算符重载举列:
Boxoperator+(constBox);Boxoperator+(constBox,constBox);
友元函数改为好友函数
ABCDE这个5个小朋友,每个人都有自己的好朋友,而且只有好朋友之间才会把自己的好吃的零食分享给对方。打个比方,A的好朋友是C。那么C就可以吃到A的零食。友元函数就是干这个的。比如把A函数声明成自己的好友函数后,这个A函数就可以访问自己的私有数据成员了。
classBox{doublewidth;public:doublelength;friendvoidprintWidth(Boxbox);//友元函数//voidsetWidth(doublewid);};
派生类改为儿子类,派生改为‘生’,基类改名为父类
一个儿子类是从一个父类一个继承了财产叫做单继承。一个儿子类从两个或多个父类继承了财产叫做多重继承,因为这个儿子类的老妈可能改嫁了好几次,而他的每个父亲都愿把财产继承给这个儿子。所以他就继承了多个父亲的财产了。虚基类改名为抠门父类,因为他把财产继承给儿子时会和他抠门父亲一起开会商量,保证他们这些抠门父亲给这个儿子的东西不会重复。这个抠门父亲给了一个电视机,另外一个抠门父亲就不会给了,得自己留着用。
classN:{public:Intx;Voiddisplay(){cout”helloworld”endl}};ClasA:publicN{public:Floaty;}
动态关联与静态关联
静态关联改名结婚绑定,双方因为结了婚,没生之前就能确定将来的小孩是谁的了。
动态关联改名产后绑定,双方还没结婚,未婚先子,某一方作风可能存疑,必须生产后看看像谁,验下DNA才知道这个小孩就是谁的。
我们先看下静态关联的定义:函数重载和通过对象名调用的虚函数,在编译时即可确定其调用的虚函数属于哪一个类,其过程称为静态关联,由于是在运行前关联的,所以又叫早期关联。
简单理解为:在编译时就可以确定虚函数的爸爸是谁,这个过程叫做结婚绑定,
我们再看下动态关联的定义:在运行时,基类指针变量指向了某个类对象,然后通过这个基类指针去调用虚函数。由于是在运行时把虚函数与对象“绑定”在一起,因此,此过程称为动态关联。由于动态关联是在编译后运行阶段进行的,所以又称为滞后关联。
简单理解为:在运行后才知道自己爸爸是谁,这个过程叫产后绑定。
要是改成这样的话,就理解起来比较深刻了,不会过一段时间后就分不清动态和静态哪个是之前确定,哪个是之后确定了。
声明:本文系作者独立观点,不代表CSDN立场。