C++ Primer Plus 第15章 友元、异常和其他

第15章 友元、异常和其他

1.友元不仅有友元函数,还能是友元类
还可以将类中的某一个成员函数指定为另一个类的友元
尽管友元被授予从外部访问私有部门的权限,单并不与面向对象编程思想相愽,相反,它们提高了公有接口的灵活性

2.类的成员函数作为其他类的友元,涉及到类的声明顺序。
还有一个函数作为两个类的友元
这方面内容看P607-611

3.嵌套类:在另一个类中声明的类被称为嵌套类
类嵌套与包含不一样。包含意味着将一个类对象作为另一个类的成员,而对类进行嵌套不创建类成员,而是定义了一种类型。

4.对类进行嵌套通常是为了帮助实现另一个类,并避免名称冲突。

5.嵌套类,结构和枚举在类中声明的作用域特征
声明位置  包含它的类是否可以使用它  从包含它的类派生而来的类是否可以使用它 在外部是否可以使用
私有部分           是                             否                             否
保护部分           是                             是                             否
公有部分           是                             是                             是,通过类限定符来使用


6.模板很适合作为嵌套类的定义

7.异常
调用std::abort()将会向标准错误流发送消息,然后终止程序

8异常机制
异常提供了将控制权从程序的一个部分传递到另一部分的途径
引发异常
使用处理程序捕获异常
使用try块

9.throw实际上是跳转。表示引发异常,紧接其后的值(如字符串或对象)指出了异常的特征

10.catch关键字表示捕获异常,随后位于括号中是类型声明,指出了要响应的异常类型

11.引发异常的函数将传递一个对象。这样的优点是使用不同的异常类型来区分不同的函数在不同的情况下引发的异常

12.异常规范 例子
double harm(double a)throw(bad_thing);     表示只会抛出bad_thing类型的异常
double marm(double) throw();   表示不会抛出异常

出现在函数原型和函数定义中,可包含类型列表,也可不包含

13.异常出现会栈解退,直到遇到第一个try块,过程中自动变量会释放,动态变量也会被调用析构函数

14.引发异常是编译器总是创建一个临时拷贝,这样子catch块的类型使用引用。好处是基类引用可以获取子类出来的异常

15如果有一个异常类继承层次结构,应该这样排列catch块:将捕获位于层次结构最下面的异常类的catch
语句放在最前面,将捕捉基类异常的catch语句放在最后面

16.有一些标准的异常类P632

17.对未捕获异常和意外异常进行处理P639-P642

18.RTTI 运行阶段类型识别(Runtime Type Identification)
RTTI只适用于包含虚函数的类

19.dynamic_cast运算符 不能回答“指针指向的是哪类对象”,但能够“是否可以安全地将对象的地址赋给特定类型的指针”
如Super * pm = dynamic_cast<Super*>(pg)
指针pg的类型是否可以安全地转换成Super*.可以,则返回对象的地址,否则返回一个空指针
通用  Type* pm = dynamic_cast<Type*>(pt)

20.typeid运算符和type_info类。
typeid可以接受两种参数:类名;结果为对象的表达式
typeid返回一个type_info对象的引用。
通过type_info的重载运算符 == 和 != 可以对类型进行比较
如typeid(Magnificent) == typeid(*pg)
检查pg指向的对象类型是否是Magnificent
P647

21.类型转换运算符
4个类型转换运算符
dynamic_cast<type-name>(expression) 判断expression能否转换成type-name
const_cast<type-name>(expression)  将类型中的const属性去掉
static_cast<type-name>(expression) type-name和expression两者可以隐式转换时,就合法。包括基类转换成子类的指针或引用
reinterpret_cast<type-name>(expression) 是不做任何处理,将内存字节拷贝的方法。有一些限制,查看P652


15.8编程练习 有时间做

 

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值