c++基础--面试总结

时间:2021-05-18 08:10:42

指针与引用

相同点:

(1) 都是地址的概念;

(2 )指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。

不同点:

(1) 指针是一个实体,而引用是一个别名;

(2)引用使用时无需解引用(*),指针需要解引用;

(3)引用定义时必须初始化,且之后不可变;指针可变;

(4)引用不能用const修饰,指针可以;

(5)引用不能为空,指针可以为空;

(6)“sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;
(7)指针和引用的自增(++)运算意义不一样;

inline函数

使用内联函数可以提高效率,但是使用它是有条件的
(1)逻辑简单,调用频繁的函数建议使用内联
(2)递归函数无法使用内联函数
另外,inline只是给编译器的一个建议,到底用不用由编译器决定

继承

继承分为公有继承、保护继承和私有继承
c++基础--面试总结
c++基础--面试总结
c++基础--面试总结

覆盖和隐藏

隐藏
派生类共有继承了父类,并且有与父类相同函数名的方法。
当实例化派生类对象时,可以直接访问到派生类的此函数,而不能访问到父类的该同名函数。
c++基础--面试总结
要访问父类的该函数要进行域名解析:
B b;
b->A::ABC();
就算参数不同也是隐藏,无法构成重载。
另外,符号::前一定是一个类
覆盖:
如果子类与父类定义有相同函数名的虚函数,则在子类的虚函数表之中这个函数的地址被子类的函数地址覆盖。

<.h>与“.h”的不同

两者的路径不一样
<.h>引入文件时会搜索程序的默认库
“.h”会在程序目录下找引入的.h文件

基类与派生类

不能将基类的对象赋值给派生类的对象。
也不能用派生类的指针指向基类的对象。
下面给两个正确使用方法:
1、子类对象赋值给父类对象
c++基础--面试总结
子类的方法和数据变量将被截断。

2、父类指针指向子类对象
c++基础--面试总结
父类指针无法指向子类的方法和数据变量,父类的指针或者对象只能调用自己的成员方法,而不能调用子类的成员方法。
虚析构函数
当存在继承关系时,用父类的指针指向堆上的子类对象,并需要父类的指针释放这块内存时,就需要使用虚析构函数。

多重继承

(1)构造时按照继承顺序依次调用构造函数,析构时顺序相反。
(2)无论继承的层级有多少层,只要保持着直接/间接的父子关系,子类都可以与自己的直接父类/间接父类保持是一个的关系,父类的指针可以操作直接子类/间接子类。

#include <iostream>
#include <string.h>
using namespace std;
class person
{
public:
person() { cout << "Person()" << endl; }
};

class Worker :public person
{
public:
Worker() { cout << "Worker() " << endl; }
//~Worker();
};

class Farmer: public person
{
public:
Farmer() { cout << "Farmer() " << endl; }
//~Farmer();
};

class MigrantWorker :public Worker, public Farmer
{
public:
MigrantWorker() { cout << "MigrantWorker() " << endl; }
//~MigrantWorker();
};
int main()
{
MigrantWorker w;
system("pause");
return 0;
}

c++基础--面试总结