基类和派生类
单继承
class <派生类名>:<继承方式><基类名>
{
<派生类新定义成员>
};
多继承
class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…
{
<派生类新定义成员>
};
继承方式 | 说明 |
public | 基类的public和protected的成员被派生类继承后,保持原来的状态 |
private | 基类的public和protected的成员被派生类继承后,变成派生类的private成员 |
protected | 基类的public和protected的成员被派生类继承后,变成派生类的protected成员 |
1.无论何种继承方式,基类的private成员都不能被派生类访问;
2.声明为public的方法和属性可以被随意访问;
3.声明为protected的方法和属性只能被类本身和其子类访问;
4.声明为private的方法和属性只能被当前类的对象访问。
虚函数在重新定义时参数的个数和类型必须和基类中的虚函数完全匹配,这一点和函数重载完全不同。
重载,覆盖 和 隐藏
重载:指C++允许多个同名的函数存在,但同名的各个函数的形参必须有区别:形参的个数不同,或者形参的个数相同,但参数类型有所不同。
覆盖:指派生类中存在重新定义的函数,其函数名、参数列、返回值类型必须同父类中的相对应被覆盖的函数严格一致,覆盖函数和被覆盖函数只有函数体 (花括号中的部分)不同,当派生类对象调用子类中该同名函数时会自动调用子类中的覆盖版本,而不是父类中的被覆盖函数版本,这种机制就叫做覆盖。
成员函数被重载的特征有:1) 相同的范围(在同一个类中); 2) 函数名字相同;3) 参数不同;4) virtual关键字可有可无。
覆盖的特征有: 1) 不同的范围(分别位于派生类与基类); 2) 函数名字相同;3) 参数相同;4) 基类函数必须有virtual关键字。
1.多态 和 虚函数,纯虚函数
多态
一句话概括就是:在基类的函数前加上virtual关键字,其派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。
如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数。
1. 用virtual关键字声明的函数叫虚函数,虚函数肯定是类的成员函数;
2.重载虚函数的类都有一个 一维的虚函数表,叫做 虚表, 类的对象有一个指向虚表的虚指针。虚表和类是对应的,虚表指针和对象是对应的。
3.多态性是一个借口的多种实现。是面向对象的核心,分为 类的多态性 和 函数的多态性。
4.多态用虚函数来实现,结合动态绑定。
5.纯虚函数是虚函数在加上 =0 ,只有函数名定义,没有函数实现;
6.抽象类是指包括至少一个纯虚函数的类。
虚函数
添加virtual 关键字申明的函数
纯虚函数
在这个类当中,我们定义了一个普通的虚函数,并且也定义了一个纯虚函数。那么,纯虚函数是什么呢??从上面的定义可以看到,纯虚函数就是没有函数体,同时在定义的时候,其函数名后面要加上“= 0”。
抽象类
我们把包含纯虚函数的类称之为抽象类
1.对于抽象类来说,C++是不允许它去实例化对象的。也就是说,抽象类无法实例化对象;
2.对于抽象类的子类也可以是抽象类;
3.对于抽象类来说,它无法实例化对象,而对于抽象类的子类来说,只有把抽象类中的纯虚函数全部实现之后,那么这个子类才可以实例化对象。
2.C++ 内存特性
4.二叉树的后序遍历
6. 指针引用, const ,构造 , 析构函数
7.map 和 hash_map 介绍
8.stl 中vector 的相关用法
9.内存中堆区 和 栈的区别
堆空间的内存是动态分配的,存放对象,需要手动释放内存。需要程序员自己申请并且指明大小,如C语言的malloc函数。
栈空间的
内存由系统自动分配,存放局部变量等,不需要手动管理内存,系统自动管理。例如声明函数中的一个局部变量int b,系统在栈中自动为b开辟空间。
10.列表初始化 和赋值初始化区别
11.海量数据查找中位数
12.C 与C++ 的区别
https://blog.youkuaiyun.com/bitboss/article/details/62884694
1.C是面向过程的语言,而C++是面向对象的语言;
2.和C++动态管理内存的方法不一样,C是使用malloc/free函数,而C++除此之外还有new/delete关键字;
3.C++的类是C所没有的,但是C中的struct是可以在C++中正常使用的。但是struct在C++中可以和class一样当做类使用,而唯一和class不同的地方在于struct的成员默认访问修饰符是public,而class默认的是private;
4.C++支持函数重载,而C不支持函数重载;