随笔分类 -  c++黑马笔记

摘要:c++的文件处理也是看为一个对象,使用文件流的类,使用头文件<fstream>,处理的时候有文本文件和二进制文件之分,主要的区别就是存储的形式 操作文件有三个大类,ofstream,写文件,ifstream,读文件,fstream,读写文件 使用时首先要用这三个大类来创建流对象,然后使用open打开 阅读全文
posted @ 2022-04-11 15:50 纸包鱼 阅读(304) 评论(0) 推荐(0) 编辑
摘要:主要是为了解决多态使用时子类有属性开辟到堆区的问题 解决方式:将父类中的析构函数改为虚析构或者纯虚析构 虚析构和纯虚析构共性:可以解决父类指针释放子类对象都需要有具体的函数实现虚析构和纯虚析构区别:如果是纯虚析构,该类属于抽象类,无法实例化对象 虚析构语法:virtual ~类名(){}纯虚析构语法 阅读全文
posted @ 2022-04-10 23:00 纸包鱼 阅读(105) 评论(0) 推荐(0) 编辑
摘要:在多态中,父类的虚函数实际上没啥用,主要在使用子类中自己重写的函数 所以这个虚函数可以直接写成纯虚函数 virtual 返回值类型 函数名 (参数列表) = 0 如果类中有了纯虚函数,那就成了抽象类,抽象类无法实例化对象,且子类必须重写纯虚函数 因为如果实例化了对象,那么这个纯虚函数就会因为无法调用 阅读全文
posted @ 2022-04-10 22:21 纸包鱼 阅读(19) 评论(0) 推荐(0) 编辑
摘要:在基类中使用虚函数的时候,空类占一个字节,空类中有虚函数有四个字节,也就是说明虚函数在空类中加入了一个指针对象 这个指针叫vfptr,virtual function ptr,虚函数表指针,指向的是虚函数表vftable,就像之前提的那样,这个虚函数表中保存的是当前这个虚函数的地址。 当从基类生成子 阅读全文
posted @ 2022-04-10 21:33 纸包鱼 阅读(30) 评论(0) 推荐(0) 编辑
摘要:多态是C++面向对象三大特性之一多态分为两类静态多态: 函数重载 和 运算符重载属于静态多态,复用函数名动态多态: 派生类和虚函数实现运行时多态 静态多态和动态多态区别:静态多态的函数地址早绑定 - 编译阶段确定函数地址动态多态的函数地址晚绑定 - 运行阶段确定函数地址 比如 void DoSpea 阅读全文
posted @ 2022-04-10 21:16 纸包鱼 阅读(45) 评论(0) 推荐(0) 编辑
摘要:两个派生类继承自同一个基类 又有某个类同时继承两个派生类 这种继承被称为菱形继承 这种继承会有一个问题,就是最后一个继承时,会将最开始的基类复制两次 所以在两个父类有相同数据的时候,要通过作用域进行区分 为了彻底解决这个问题,可以使用虚继承,在继承方式前加virtual。class person : 阅读全文
posted @ 2022-04-10 20:55 纸包鱼 阅读(45) 评论(0) 推荐(0) 编辑
摘要:c++支持一个类支持多个类 class 子类:继承方式 父类,继承方式,父类 不过这样会导致重名等问题变得很麻烦,要在使用是指定参数所在定义域,所以一般不推荐使用 阅读全文
posted @ 2022-04-10 20:39 纸包鱼 阅读(19) 评论(0) 推荐(0) 编辑
摘要:静态成员和非静态成员处理一致,静态成员类内声明,类外初始化,只有一个值,因为虽然同名,但是因为作用域不同,所以两者本质上并不相同。 可以通过对象访问,也可以通过类名的方式访问 阅读全文
posted @ 2022-04-10 20:32 纸包鱼 阅读(18) 评论(0) 推荐(0) 编辑
摘要:同名成员属性的时候直接调用的是自身的数据,也就是this直接指向的数据 调用父类的数据要加作用域,同名的函数也与之类似,同时注意,只要子类中存在于父类中同名的成员函数,那么子类的同名成员会隐藏父类的所有同名成员,包括重载函数。因此,调用父类中同名的重载函数时,也需要加一个作用域 s.Base::m_ 阅读全文
posted @ 2022-04-10 15:32 纸包鱼 阅读(52) 评论(0) 推荐(0) 编辑
摘要:子类继承父类后,当初始化和销毁时,父类中的数据初始化和销毁会由父类的构造和析构函数进行 顺序是先构造父类成员,再构造子类成员,先销毁子类成员,再销毁父类成员 阅读全文
posted @ 2022-04-10 13:14 纸包鱼 阅读(101) 评论(0) 推荐(0) 编辑
摘要:继承方式有公共继承,保护继承,私有继承,对应三种不同的权限 注意,基类中的私类不管什么权限都不可继承,继承的其他权限与继承方式取最严权限 简单说就是继承的方式无法决定继承的内容,只能决定继承过来后的权限 但是在继承的时候,子类会继承父类的静态成员外的所有数据,哪怕是私有数据也是一样,只不过继承后编译 阅读全文
posted @ 2022-04-10 13:09 纸包鱼 阅读(32) 评论(0) 推荐(0) 编辑
摘要:继承是面向对象三大特性之一 子类继承父类代码,减少重复的代码 class persona :public person {} class 子类 :继承方式 父类 这样编译器在编译的时候就可以将person中public的部分展开到persona中,子类也可以叫派生类,父类也可以叫基类 阅读全文
posted @ 2022-04-10 12:36 纸包鱼 阅读(17) 评论(0) 推荐(0) 编辑
摘要:c++编译器至少给一个类添加4个函数1. 默认构造函数(无参,函数体为空)2. 默认析构函数(无参,函数体为空)3. 默认拷贝构造函数,对属性进行值拷贝4. 赋值运算符 operator=, 对属性进行值拷贝 这个重载主要是为了防止有堆区的时候会有重复删除地址的问题,所以要有重载函数,进行深拷贝 跟 阅读全文
posted @ 2022-04-10 12:03 纸包鱼 阅读(61) 评论(0) 推荐(0) 编辑
摘要:要注意递增递减运算符有前置和后置的问题,使用类内定义,在形参上使用给一个int站位符,编译器会把有占位符的定义为后置,前置运算正常进行,返回一个引用 后置运算要返回一个值,而不是引用,因为实际的值已经改变了,返回的值是一个改变前的,因为这个值是用局部变量保存的,所以不能返回引用,因为相同的原因,在调 阅读全文
posted @ 2022-04-10 11:44 纸包鱼 阅读(48) 评论(0) 推荐(0) 编辑
摘要:因为cout在左边,所以<<重载一般只能用全局函数,同时输入person和输出流变量ostream,因为输出流变量ostream是一个全局只有一个的静态变量,所以必须要用引用的方式使用。同时为了实现链式编程,返回值依旧是ostream& 重载运算符配合友元可以实现自定义类型的输出 ostream&o 阅读全文
posted @ 2022-04-10 11:06 纸包鱼 阅读(379) 评论(0) 推荐(0) 编辑
摘要:对已有运算符进行重新定义,赋予其另一种功能。 在类内创建函数,函数名为operator运算符,person operater+ (person &p),通过成员函数重载+ 在类外创建成员函数,作为+函数的一个重载版本 person operater+ (person &p1,person &p2) 阅读全文
posted @ 2022-04-10 10:46 纸包鱼 阅读(112) 评论(0) 推荐(0) 编辑
摘要:友元的目的是让一个函数或者类访问另一个类中的私有成员,本质,是让其它不属于本类的成员(全局函数,其它类的成员函数),成为类的成员而具备了本类成员的属性。 友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字frien 阅读全文
posted @ 2022-04-10 10:03 纸包鱼 阅读(89) 评论(0) 推荐(0) 编辑
摘要:常函数: void func() const成员函数后加const后我们称为这个函数为常函数常函数内不可以修改成员属性成员属性声明时加关键字mutable后,在常函数中依然可以修改 this指针的本质是一个指针常量person * const this,这个指针指向的位置是不可更改的,而在函数后加了 阅读全文
posted @ 2022-04-09 22:19 纸包鱼 阅读(47) 评论(0) 推荐(0) 编辑
摘要:c++中的空指针也是可以调用成员函数的 但是只能调用成员函数和静态成员变量,因为这些成员不需要this'指针指向 其他的成员会隐式由this指向,而此时this = NULL,所以无法调用 阅读全文
posted @ 2022-04-09 22:10 纸包鱼 阅读(45) 评论(0) 推荐(0) 编辑
摘要:c++会提供特殊的对象指针,this指针,指针指向被调用的成员函数所属的对象 this指针是隐含每一个非静态成员函数内的一种指针this指针不需要定义,直接使用即可 this指针的用途:当形参和成员变量同名时,可用this指针来区分,解决名声冲突在类的非静态成员函数中返回对象本身,可使用return 阅读全文
posted @ 2022-04-09 22:06 纸包鱼 阅读(56) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示