C++学习笔记-----基础知识和常见面试问题

1.面向对象

        面向过程:以过程为中心,将程序抽象成数据和对数据的操作。

        面向对象:以对象(类)为中心,将程序抽象成对象之间的操作

1.1 封装、继承、多态

        封装:代码模块化;

        继承:代码重用;

        多态:接口重用。

1.2 重载和重写

重载:不同的函数使用相同的函数名,但是参数个数或者类型不同

重写:派生类中对基类的虚函数重新实现,即函数名和参数都一样,但是实现体不一样

1.3 深拷贝和浅拷贝

    浅拷贝:值拷贝,指向同一块内存空间,(默认构造函数和默认的赋值运算符重载函数)

    深拷贝:拷贝相应的内存,不会出现重复释放同一块内存的现象

1.4 多态:静态多态和动态多态

    静态多态有函数重载、运算符重载、泛型编程等,(重载和模板)

    动态多态是在程序运行时根据基类的引用(指针)指向的对象来确定自己具体该调用哪一个类的虚函数。当父类指针(引用)指向 父类对象时,就调用父类中定义的虚函数;即当父类指针(引用)指向 子类对象时,就调用子类中定义的虚函数(虚函数和继承)

1. 动态多态行为的表现效果为:同样的调用语句在实际运行时有多种不同的表现形态。

2. 实现动态多态的条件: - 要有继承关系 - 要有虚函数重写(被 virtual 声明的函数叫虚函数) - 要有父类指针(父类引用)指向子类对象

3. 动态多态的实现原理 当类中声明虚函数时,编译器会在类中生成一个虚函数表,虚函数表是一个存储类虚函数指针的数据结构, 虚函数表是由编译器自动生成与维护的。virtual 成员函数会被编译器放入虚函数表中,存在虚函数时,每个对象中都有一个指向虚函数表的指针(vptr 指针)。在多态调用时, vptr 指针就会根据这个对象在对应类的虚函数表中查找被调用的函数,从而找到函数的入口地址(使用虚函数需要额外的内存和执行速度的成本)

1.5 拷贝构造和赋值构造

拷贝构造时机:用一个对象初始化另一个对象,对象以值传递的方式传递给函数参数,函数局部对象以值传递的方式从函数返回

赋值操作:将一个对象赋值给另一个对象

1.6 类如何不能实例化

1. 抽象类(纯虚函数)

2. 构造函数声明为private(单例模式)

1.7 多继承的二义性

1. 利用作用域::;

2. 派生类定义同名成员,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值