C/C++编程:class

1059 篇文章 285 订阅

用法

  • 声明类
  • 声明有作用域枚举类型
  • 在模板声明中,class 可用于引入类型模板形参与模板模板形参
  • 若作用域中存在具有与某个类类型的名字相同的名字的函数或变量,则 class 可附于类名之前以消歧义,这产生一个详述类型说明符

什么是类

  • C++类是创建新类型的工具,创建出的新类型可以像内置类型一样的方便使用。而且,派生类和模板允许程序员表达类之间的(层次和参数化)管理并利用这种关系。
  • 一个类型就是一个概念的具体表示。比如C++内置类型float以及其运算+、-、*、/等一起提供了数学概念”实数“的一种近似表示。
  • 定义新类型的基本思想是将实现的细节(比如,某种类型对象的数据存储布局)与正确使用它的必要属性(比如,可访问的函数的完整列表)分离。这种分离的最佳表达方式是:通过一个专用接口引导数据结构以及其内部辅助程序的使用。
  • 类是用户自定义类型。一个类就是一个包含成员的名字空间。
  • public提供类的接口,private成员提供实现细节
  • struct是成员默认为public的class

示例

class Foo;  // 类的前置声明
 
class Bar { // 类的定义
  public:
    Bar(int i) : m_i(i) {}
  private:
    int m_i;
};
 
template <class T> // 模板实参
void qux() {
    T t;
}
 
int main()
{
    Bar Bar(1);
    class Bar Bar2(2); // 详述的类型
}

建议

  • 应该将构造函数、赋值操作以及析构函数设计为一组匹配的操作
  • 使用构造函数为类建立不变式
  • 如果一个构造函数获取了资源,那么这个类就需要一个析构函数来释放该资源
  • 如果一个类有虚函数,它就需要一个虚析构函数
  • 如果一个类没有构造函数,它可以进行逐成员初始化
  • 在构造函数中优先选择成员初始化而不是赋值操作
  • 优先选择移动语义和写前拷贝而不是浅拷贝
  • 优先使用{}初始化而不是()初始化
  • 按声明顺序初始化成员和基类
  • 使用类内初始化器来提供默认值
  • 当且仅当类对象有“自然的”默认值才为类定义默认构造函数
  • 如果一个默认构造函数、赋值操作或者析构函数是恰当的,让编译器自动生成它
  • 如果一个类是一个容器,为它定义一个初始化器列表构造函数
  • 如果一个类有一个引用成员,它可能需要非默认拷贝操作
  • 如果一个类有一个指针成员,它可能需要非默认拷贝操作和析构函数
  • 如果一个类是一个资源句柄,它可能需要非默认拷贝/移动操作、构造函数、析构函数
  • 如果一个类需要一个拷贝操作或一个析构函数,它可能需要一个构造函数、一个析构函数、一个拷贝赋值操作和一个拷贝构造函数
  • 当编写一个拷贝构造函数时,小心拷贝每个需要拷贝的元素
  • 一个拷贝操作应该提供等价性和独立性
  • 小心纠缠的数据结构
  • 显示说明一个不变式:用构造函数建立不变式,用赋值操作保持不变式
  • 确保拷贝赋值操作能够安全的自赋值
  • 当向类添加一个新成员时,检查用户自定义构造函数是否需要更新,以便初始化新加入的成员
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值