侯捷C++(一、面向对象)

笔记

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:指向动态独享的指针,销毁对象,并释放与之关联空间

动态内存管理出现的问题

  1. 用完没释放,内存泄漏
  2. 没用完就释放,出现非法内存的指针
  3. 用完后多次释放,程序警告,或报错,或崩溃

智能指针的作用就是解决上述三种可能出现的问题,指针指针的使用效率不会比一般的指针高,但是它胜在更安全、更稳定

二、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个虚函数,虚函数的调用:通过各自类的虚指针,跳到虚表,根据函数名在虚表中查找函数

P36 22 示例 new和delete

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值