条款19:设计class犹如设计type

本文探讨了在C++中设计新类型时的关键注意事项,包括对象创建与销毁机制、初始化与赋值的区别、值传递的影响、合法值的规定、继承关系、类型转换、合理操作符与函数、标准函数选择、成员访问权限以及新类型的通用性评估。
摘要由CSDN通过智能技术生成

目录

1.前言

2.相关注意事项

2.1新的type的对象应该如何被创建和销毁?

2.2 对象的初始化和对象的赋值该有什么样的差别

2.3 新的type对象如果被passed by value,意味着什么?

2.4 什么是新type的合法值

2.5 新type需要配合某个继承图系吗?

2.6 新的type需要什么样的转换

2.7什么样的操作符和函数对此新type而言是合理的?

2.8什么样的标准函数应该被驳回

2.9谁该取用新type的成员

2.10.什么是新type的“未声明接口”

2.11 新type有多么一般化

2.12 真的需要一个新type吗


1.前言

C++就像在其它OOP(面向对象编程)语言一样,当你定义一个新class,也就定义了一个新的type。作为程序员,很多时间主要用来扩张你的类型系统。这表明我们不只是class的设计者,还是type设计者。重载函数和操作符,控制内存的分配和归还(关于内存的介绍:深度阅读:深入 C++ 内存管理(万字长文) - 知乎 (zhihu.com)),定义对象的初始化和终结,这些操作都取决于我们。因此在进行相关操作时,应该带着和“语言设计者当初设计语言内置类型时”的谨慎来研讨class的设计。

2.相关注意事项

设计优秀的classes是一项艰巨的任务。那么如何设计高效的classes呢。首先应该注意到以下几个问题:

2.1新的type的对象应该如何被创建和销毁?

这主要会影响到class的构造函数和析构函数以及内存分配函数和释放函数

2.2 对象的初始化和对象的赋值该有什么样的差别

2.3 新的type对象如果被passed by value,意味着什么?

2.4 什么是新type的合法值

2.5 新type需要配合某个继承图系吗?

如果继承自某些即有的classes,就受到那些classes的设计束缚,特别是受到“它们的函数是virtual或non-virtual”的影响。如果允许其他classes继承你的class,那么影响你所声明的函数-特别是析构函数是否为virtual。

2.6 新的type需要什么样的转换

如果你希望允许类型T1被隐式转换为T2,就必须在class T1内写一个类型转换函数(operator T2)或在classes T2内写一个non-explict-one-argument(可被单一实参调用)的构造函数。如果只允许explict构造函数存在,就得写出专门负责执行转换的函数,且不得为类型转换操作符或non-explict-one-argument构造函数。

2.7什么样的操作符和函数对此新type而言是合理的?

2.8什么样的标准函数应该被驳回

2.9谁该取用新type的成员

2.10.什么是新type的“未声明接口”

它对效率,异常安全性以及资源运用提供何种保证?在这些方面提供的保证将为你的class内的代码加上相应的约束条件。

2.11 新type有多么一般化

2.12 真的需要一个新type吗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值