C++ 常见的基础概念

1. C++面向对象特征
封装:指隐藏对象的属性和实现细节,仅对外提供公共访问方式;
继承:可以使子类具有父类的属性和方法或者重新定义、追加新的属性和方法,是代码扩展的一种方式;继承包含实现继承、接口继承及可视继承。其中,实现继承是使用父类的属性和方法;接口继承是基于父类的属性和方法,子类继承父类的方法并进行重新实现的过程;可视继承是指子窗体(类)使用父窗体(类)的外观和实现代码的能力。
多态:多态分为编译时多态和运行时多态。编译时多态实现方式是函数重载和泛型编程,运行时多态主要是通过虚函数来实现的。
虚函数:虚函数是类的非静态成员函数,访问权限一般为public,函数声明时,在函数返回之前加virtural关键字,虚函数定义时不需要加virtural关键字。父类定义的虚函数,子类在继承时,需要对父类的虚函数进行重新定义和实现。用父类的指针指向子类的实例,然后通过父类的指针可以指向实际子类的成员函数。
纯虚函数:纯虚函数指在虚函数声明时,在函数尾部加“=0”。纯虚函数没有函数定义,它的子类需要继承所有父类的纯虚函数并给出定义。纯虚函数的作用就是给所有的子类提供统一的外部接口。
抽象类:指含有纯虚函数的类是抽象类,该类不能创建对象,但可以声明指针或引用。
2. 子类析构时调用父类的析构函数吗?
子类在析构时先调用派生类的析构函数,然后调用基类的析构函数。也就是说基类析构调用时,派生类的数据已经全部销毁了。
3. 引用的概念?引用在使用时需要注意哪些?引用作为函数参数的好处?
引用就是给变量起别名。对引用的操作与对其它变量的操作时一样的;
声明一个引用时,切记需要对引用进行初始化。引用声明完毕后,该变量有两个名称,即原目标变量名和引用名,引用名不能再次作为其它变量名的别名;
引用名作为函数参数的效果和指针是一样的,但是引用名作为函数参数作用可以归纳为以下两种:
<1> 对被调函数参数的使用,实际上是对主调函数中实参的使用;
<2> 引用名作为函数参数时,不产生实参的副本,它是直接对实参操作的。相反,当函数参数是值传递时,需要给形参分配内存空间,即在内存中产生实参的副本;当函数参数是对象时,还需要调用赋值构造函数。
4. 将引用作为函数返回值类型的格式、好处及需要遵守的规则?
格式:类型标识符 &函数名(形参列表及类型说明){//函数体}
好处:在内存中不产生被返回值的副本
规则:
不能返回局部变量的引用;
不能返回函数内部new分配的内存的引用;
可以返回类成员的引用,但注意加const。
5. 重载、重写(覆盖)及隐藏的区别
1> 重载与重写的区别:
- 范围
重载发生在同类中,而重写发生在不同的类中;
- 参数列表
重载参数列表一定不同,重写的参数列表一定相同;
- 有无virtural关键字
重写的基类必须要加virtural关键字,但是重载可加可不加。

2> 隐藏与重载和重写的区别
与重载的范围不同:隐藏发生在不同的类之间;
隐藏函数的参数列表可以相同,也可以不同,但是函数名称必须相同;当参数不同时,无论是否加virtural关键字,基类的函数都是被隐藏,不是被重写。

6. 内存分配方式

- 从静态存储区域分配。
内存在程序编译时已经分配好,这块内存在程序的整个运行期间都有效。例如全局变量、static静态变量。
- 从栈上分配。
- 从堆上分配(动态分配内存)

7. 指针数组与数组指针
指针数组:是一个数组,用来存放指针的数组。一个数组中存放的同类型的指针。例如int a[10];
数组指针:是一个指针,指向数组的指针。例如 int (a)[10];
8. const的用法
- 用于定义变量
<1> 只有一个const,位于
的左侧,表示指针所指数据是常量,不能通过解引用来修改数据。指针本身是变量,可以指向其它的内存地址;例如, const int
a = 10;
<2> 只有一个const,位于的右侧,表示指针本身是常量,不能指向其它的内存地址。指针所指的数据可以修改。例如,int const a = 10;
<3> 有两个const,分别位于*的左右两侧,指针和指针所指的数据都不能修改。
- 修饰函数的参数
<1> const修饰输入参数为“指针传递”时,那么添加const可以防止参数值被修改;
<2> 对于非内部数据类型的输入参数,应该将“值传递”修改为“const 引用传递”,目的是为了提高程序的效率;例如,将void Func(A a); 修改为 void Func(const A &a),避免产生临时对象;
- 修饰函数的返回值
<1> 如果给“指针传递”方式的函数返回值加const修饰,那么函数的返回值的内容不能被修改,该返回值只能赋值给加const的同类型指针;
<2> 如果函数参数采用“值传递”方式,由于函数会把返回值复制给外部临时存储单元中,加const修饰毫无意义。
- 修饰函数的定义体
const修饰类的成员函数,目的是防止成员函数修改被调用对象的值,如果我们不想修改一个调用对象的值,所有的成员函数都应当声明为const成员函数。
9. 虚函数的实现原理

猜你喜欢

转载自blog.csdn.net/QIJINGBO123/article/details/86152701
今日推荐