现在的位置: 首页 > 综合 > 正文

C++特性学习

2017年12月12日 ⁄ 综合 ⁄ 共 818字 ⁄ 字号 评论关闭

1 为什么需要虚函数

为了让程序更灵活,就像C#或者Java中定义的接口那样,接口中定义了虚函数,继承类中要实现对应的虚函数,这样函数调用的时候只要调用基类的接口函数,由于多态性的存在,会调用到继承类中的方法了。那个计算不用形状的面积的例子解释了虚函数的引用。

2 函数的重载,隐藏和覆盖

2.1 重载有函数重载和运算符重载,作用都是为了增加代码使用的灵活性,比如运算符重载可以让复数的加减乘除运算像实数一致

2.2 隐藏?

2.3 覆盖和多态是联系在一起的,只有基类声明了virtual类型的函数,在派生类中要声明和基类的签名相同的函数才会发生覆盖,其它所有情况都是隐藏

3 为什么需要友元

让对象的数据暴漏出来

4 为什么需要引用类型

4.1 运算符重载

4.2 对象,结构体作为形参传递时为了避免临时变量复制

5 为什么需要复制构造函数

当类的成员函数中存在指针类型的成员变量时,需要复制构造函数(深度复制),因为在将一个对象赋给另一个对象时,默认情况下C++只会将对象的指针复制给另一个对象,而指针指向的内容是不被复制的,所以当这两个对象的生命周期结束时,必定要调用析构函数,析构函数中会回收(用delete)指针所指向的内存空间,由于两个对象都要回收这个内存空间,所以后回收空间的那个析构函数一定会发生错误,以为指针指向的空间被之前的那个对象回收了。所以复制构造函数就要登场了,复制构造函数就是要求用户手动的在类内定义一个函数,在发生对象复制操作时,会将指针指向的内容进行复制。

6 为什么构造函数需要成员初始化列表

首先要清楚对成员函数的初始化和对成员函数的复制是不同的概念。在构造函数体重对成员变量的赋值不是初始化,成员变量的初始化发生在调用构造函数之前,如果采用在构造函数体重进行复制,其实实际完成的动作是,编译器首先调用了默认构造函数对成员进行初始化,然后才进入构造函数体,构造函数体中重新对成员进行赋值,这会影响效率。采用成员初始化列表是对成员变量进行初始化效率更高

【上篇】
【下篇】

抱歉!评论已关闭.