/
...
/
/
Tips
Search
Try Notion
Tips
一.基础数据类型
一.声明/作用/链接
#inlcude不能包含于命名空间中,必须置于最外层,或者说只能置于全局命名空间
假设有两个.h文件,各自有一个命名空间namespace a,namespace b
我们希望a b关系是平行的,若采用include 则会出现b成为a的子命名空间
链接性 作用域 声明区域
想要在访问其他文件的变量要满足两个要求
可链接:
要有函数原型声明:
声明区域相当于
二.友元
成员函数 友元比较
如果成员在public,则二者都可以访问private,功能很相似
对于函数而言,成员函数更自由,多了隐式*this传参
对于操作符重载而言,友元更自由
成员函数的第一个操作数定死为*this
不能同自动类型转换像耦合起来
当个友元函数完全以内联形式位于声明区域时候,他虽然形式上是成员函数,也可访问private,但不是成员函数,没有隐含this指针传参
友元类
假设两个类 TV Remote 在某个.h中
TV中使用了 friend Remote::fun1,需要Remote在TV之前定义
Remote中使用了 TV的内部对象 ,需要TV在Remote之前定义
最后选择Remote在TV前定义,优先满足友元的要求
使用了内部对象,是在其函数中使用,可以将函数后置定义,类定义中只放置函数声明即可,同时前置声明class TV,告知有这个类即可
三.类
复制构造函数 默认构造函数 =号(赋值)重载
对于非同类的构造函数相当于重载了了(mytype) othertype运算符
=号重载 同 复制构造函数 非常类似
a=b 赋值重载注意delete a原来的用new分配的成员
都需要考虑深复制: 如果不进行深复制,则会出现两个变量指向同一个对象的情况,假设一个是临时变量,销毁时,调用析构,则剩下哪个变量的内容会被破坏
在初始化时候可能依据实现的不同
若使用 非同类赋值重载 则相当于完成了cast 和 复制构造的两个工作
🖼️框图比较
本类到其他类转换则是采用了 operateor typename() cast重载
虚函数
不像作用域无需显示指明,子作用域的同名变量自动覆盖
在继承关系中若想要能够被覆盖,需要指明自身为虚函数
在继承类被当作基类看待时候,超过时间周期时候,默认调用基类的析构,会造成对象多余,必须将基类析构作为虚函数
嵌套类/包含类
嵌套类: 在类中定义类 包含类: 在类中包含其他类的的变量
一般是为了给外层类中的成员分类的同时,避免名称冲突,比如Queue中含有Node类,但我们想要自己实现Node.又不想名称冲突