设为首页收藏本站 |天气与日历| 2025-07-02 星期三 01:14:00 乙巳(蛇)年 六月初八 丑时
     
切换到窄版

私人站点

 找回密码
 立即注册
搜索
查看: 197|回复: 0

C++的一些语法特性.六

[复制链接]

954

主题

954

帖子

3879

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3879
发表于 2022-1-11 14:11:30 | 显示全部楼层 |阅读模式
[C] 纯文本查看 复制代码
01-课程回顾.avi
02-关系运算符重载.avi
03-函数调用运算符重载.avi
04-不要重载逻辑与和逻辑或以及重载建议.avi
05-强化训练-字符串类封装(一).avi
06-强化训练-字符串类封装(二).avi
07-继承的基本语法.avi
08-继承方式.avi
09-继承中的对象模型.avi
10-继承中的构造和析构顺序.avi
11-继承中的同名成员处理.avi
12-继承中的同名静态成员处理.avi
13-多继承基本语法.avi
14-菱形继承的问题以及解决.avi
15-虚继承内部工作原理.avi

1 关系运算符重载
1.1 对于自定义数据类型,编译器不知道如果进行比较
1.2 重载  ==   =
1.3 bool operator==( Person & p)
1.4 bool operator!=(Person & p)
2 函数调用运算符重载
2.1 重载 ()
2.2 使用时候很像函数调用,因此称为仿函数
2.3 void operator()(string text)
2.4 int operator()(int a,int b)
2.5 仿函数写法不固定,比较灵活
2.6         cout << MyAdd()(1, 1) << endl; // 匿名函数对象 特点:当前行执行完立即释放
3 不要重载 && ||
3.1 原因是无法实现短路特性
3.2 建议:将<< >>写成全局函数,其他可重载的符号写到成员即可
4  强化训练-字符串类封装
4.1 myString类 实现自定义的字符串类
4.2 属性
4.2.1 char * pString; 维护 在堆区真实开辟的字符数组
4.2.2 int m_Size; 字符串长度
4.3 行为
4.3.1 有参构造 MyString(char * str)
4.3.2 拷贝构造 MyString(const MyString & str);
4.3.3 析构  ~MyString();
4.4 重载<< 运算符
4.5 重载 >> 运算符
4.6 重载 =   赋值运算
4.7 重载 []  str[0]  按照索引位置设置获取字符
4.8 重载 +  字符串拼接
4.9 重载 == 对比字符串
5 继承基本语法
5.1 继承优点:减少重复的代码,提高代码复用性
5.2 // 语法: class 子类 : 继承方式   父类
5.3 // News                子类    派生类
5.4 // BasePage 父类    基类
6 继承方式
6.1 公共继承
6.1.1 父类中公共权限,子类中变为公共权限
6.1.2 父类中保护权限,子类中变为保护权限
6.1.3 父类中私有权限,子类访问不到
6.2 保护继承
6.2.1 父类中公共权限,子类中变为保护权限
6.2.2 父类中保护权限,子类中变为保护权限
6.2.3 父类中私有权限,子类访问不到
6.3 私有继承
6.3.1 父类中公共权限,子类中变为私有权限
6.3.2 父类中保护权限,子类中变为私有权限
6.3.3 父类中私有权限,子类访问不到
7 继承中的对象模型
7.1 父类中的私有属性,子类是继承下去了,只不过由编译器给隐藏了,访问不到
7.2 可以利用开发人员工具查看对象模型
7.3 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts
7.4 打开开发人员命令工具
7.5 跳转盘符 E:
7.6 跳转文件路径  cd到文件路径下
7.7 cl /d1 reportSingleClassLayout类名  文件名
8 继承中的构造和析构
8.1 先调用父类构造,再调用其他成员构造, 再调用自身构造 ,析构的顺序与构造相反
8.2 利用初始化列表语法  显示调用父类中的其他构造函数
8.3 父类中 构造、析构、拷贝构造 operator=  是不会被子类继承下去的
9 继承中的同名成员处理
9.1 我们可以利用作用域 访问父类中的同名成员
9.2 当子类重新定义了父类中的同名成员函数,子类的成员函数会 隐藏掉父类中所有重载版本的同名成员,可以利用作用域显示指定调用
10 继承中的同名 静态成员处理
10.1 结论和 非静态成员 一致
10.2 只不过调用方式有两种
10.2.1 通过对象
10.2.2 通过类名
10.2.2.1  通过类名的方式 访问 父类作用域下的m_A静态成员变量
10.2.2.2  Son::Base::m_A
11 多继承基本语法
11.1 class 子类 : 继承方式  父类1 , 继承方式 父类2
11.2 当多继承的两个父类中有同名成员,需要加作用域区分
12 菱形继承
12.1 两个类有公共的父类  和共同的子类 ,发生菱形继承
12.2 菱形继承导致数据有两份,浪费资源
12.3 解决方案:利用虚继承可以解决菱形继承问题
12.3.1 class Sheep : virtual public Animal{};
12.4         //当发生虚继承后,sheeptuo类中 继承了一个  vbptr指针   虚基类指针   指向的是一个 虚基类表  vbtable
12.5         //虚基类表中记录了  偏移量 ,通过偏移量 可以找到唯一的一个m_Age
12.6 利用地址偏移找到 vbtable中的偏移量 并且访问数据
13

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|编程站点 ( 冀ICP备2023028127号-2 )|友链申请|

GMT+8, 2025-7-2 01:14 , Processed in 0.092985 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表