C的面向过程:
想法就是运行高效,版本更新擦除重来
C++的面向对象:
封装:概况提炼 属性有一些被隐藏有一些可以通过公有的方式查看修改(不太准)
继承:父类把属性复制一份给子类用
多态:多种形态(函数调用可以有多种的执行内容)
什么是类?
具有相同的属性方法的个体的抽象
什么是构造函数?
创建函数时自动调用的 和类名相同的 没有返回值的函数
默认构造:没有任何构造函数时才存在的构造
浅拷贝 深拷贝区别(怎么说)
浅拷贝:赋值
深拷贝:自己用自己的,回收也回收自己的
浅拷贝的场景:
(特点是数据共享)
初始化列表
父(A)子(初始化列表里先B的对象成员初始化然后后面构造C)
拷贝构造是什么?
用已经有的对象给一个对象初始化,(传参参数是一个对象,返回值返回值是一个对象)
给初值和赋值要区别的说
析构的问题:
虚析构的场景:防止的父类指向子类对象,执行父类析构,漏掉子类的独有部分
const
修饰成员属性:
注意给初值
修饰成员函数:(常用的有get方法)
修饰的*this
常对象不能用普通函数
普通对象可以用常函数
思考题:
const 枚举 #define的区别
(待续)
静态特点:
静态全局变量:1.本文件有效
静态成员属性:1.多个对象共用一个静态属性(共用) 2.子类不能继承(父子用一个) 3.类外初始化(cpp里初始化)4.不依赖对象
静态成员函数:1.不依赖对象 2.不能实现多态 3.不能虚 4.不能直接调用类中的非静态成员(需要有对象)
static修饰类外函数:1.本文件有效 2.一直到程序结束都存在
静态与全局的区别(全局静态和局部静态)
virtual
实现多态
inline 关键字 内联函数
适合代码少,调用频繁
构造适合内联
析构可以是
虚析构 (不太行,虚析构的特性就是执行是变化的)
friend友元
一种只让部分类或函数用的想法
1.友元成员不是这个类的成员
2.友元函数要创建对象再用
3.破坏封装(现在多用get方法)
4.不可继承
纯虚函数:
抽象类:含有纯虚函数的类
接口类:函数都是纯虚函数
子类必须实现父类纯虚函数的方法,才能实例化对象
重载操作符
系统会自己写的(赋值,取地址)
()的重载->仿函数
赋值与拷贝构造比较
1.返回值
2.空间的处理
3.一个是修改一个是初始化
MyString 析构 构造 拷贝构造 重载操作符
空类中包含的函数:构造 构造 拷贝构造 赋值重载操作符 取地址重载操作符
为什么拷贝构造要对要拷贝的目标用引用?
赋值操作会死循环
小题目
有一个虚函数呢? 4
哪些函数不能被virtual 关键字修饰 ?
1.friend 2.static 3.inline 4.构造 5.类外的普通函数
类与类之间关系
类图
多态
静态多态:(重载和模板)(模板类)
代码不变,功能可变,(函数指针 )
动态多态:(运行时确定)
1.父类指针指向子类对象
2.父类有虚函数
3.子类重写虚函数
4.调用虚函数 需要虚指针 找到虚表
5.虚指针(对象的前4个字节)在创建对象时才产生,所以要运行时才确定
上面的是我总结的,
下图的比较细
分析输出结果
虚函数优缺点:
重载和重写
重载 :相同作用域,函数名相同,参数列表不同
重写:覆盖,参数列表相同,函数名相同,返回值相同(有特殊情况,暂时不考虑)