笔记
P16 3 non explicit one
class Fraction{
public:
Fraction(int num, int den=1)
:m_numerator(num), m_denominator(den){}
Fraction operator + (const Fraction& F){
return Fraction(...);
}
private:
int m_numerator;
int m_denominator;
}
使用
Fraction a = f + 4;
同类型相加,Fraction类会使用析构函数将4类型转换
给析构函数加上 explicit
explicit Fraction(int num, int den=1)
:m_numerator(num), m_denominator(den){}
表示明确的析构函数,即此函数只进行析构操作(不会被编译器用作他处,如转换)
P17 4 pointer like classes
一、pointer-like classes, 关于智能指针
https://www.cnblogs.com/-citywall123/p/12694761.html
指针指针的使用效率不会比一般的指针高,但是它胜在更安全、更稳定,因为指针存放在类中,不通过类无法操作,通过类操作只能使用类中提供的函数。
智能指针作用可以解决动态内存管理问题
一、作用
动态内存管理问题:
new:再动态内存中分配一块空间并返回一块指针
delete:指向动态独享的指针,销毁对象,并释放与之关联空间
动态内存管理出现的问题
- 用完没释放,内存泄漏
- 没用完就释放,出现非法内存的指针
- 用完后多次释放,程序警告,或报错,或崩溃
智能指针的作用就是解决上述三种可能出现的问题,指针指针的使用效率不会比一般的指针高,但是它胜在更安全、更稳定
二、pointer-like classes,关于迭代器
利用模板类对一般的指针进行封装,节点结构体有三个成员:前指针,后指针,本身的数据。
多个节点用前后指针串联起来,模板类封装起来(写访问前后的节点的函数、操作符访问数据函数,++、–、等等)
上述操作和对普通指针没什么区别,为什么叫智能?因为他封装了指针,不会被其他程序随意更改指针,想改指针,只能通过此模板类更改,更改方式更是限制操作,只能使用模板类中的函数,尽最大可能减少对指针操作所造成的程序崩溃。智能指针比普通指针使用效率不会更高,但更安全,更稳定,
P20 7 class template
类模板
P21 8 Funtion Template
函数模板不需要<>说明类型,编译器会推断
P22 9 Member Template
模板里面套模板
外面模板用<>标出,里面模板推断出
P23 10 specialization
特化,针对不同类型同种名字进行分别函数输出
https://blog.csdn.net/weixin_43744293/article/details/123919688
P25 12 模板模板参数
没懂
template<typename T,
template <typename T>
class Container>
P27 14 三个主题
P28 15 Reference
P30 17 关于vptr和vtbl
通过子类改写虚函数,调用虚函数名所指向的函数指针会被改变通过指针,指针向上转型,虚函数
,为动态绑定
A、B、C各有自己的虚表
A有vfunc1、vfunc2两个虚函数,则虚表中有两个指向函数的指针
B是之类,继承父类A的虚函数,B覆写了vfunc1函数,所以B的虚表有自己vfunc1函数的指针和继承父类的vfunc2的指针
C是之类,继承父类B的虚函数,C覆写了vfunc1函数,所以C的虚表有自己vfunc1函数的指针和继承父类的vfunc2的指针
三个虚表共有4个虚函数,虚函数的调用:通过各自类的虚指针,跳到虚表,根据函数名在虚表中查找函数文章来源:https://www.toymoban.com/news/detail-536927.html
P36 22 示例 new和delete
文章来源地址https://www.toymoban.com/news/detail-536927.html
到了这里,关于侯捷C++(一、面向对象)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!