C++之类

-
-
2026-03-11 10:35

本文内容为《C++ Primer(第五版)》相关章节整理而得。

一、构造函数

1. 默认构造函数

  • 默认构造函数又叫做:合成的构造函数,一旦定义了其他的构造函数,除非再定义一个默认的构造函数(C++11以上实现方法:在参数列表后写上 = default),否则类将没有默认构造函数。

2. 成员的初始化顺序

  • 构造函数初始值列表只说明用于初始化成员的值,而不限定初始化的具体执行顺序。
  • 成员初始化顺序与它们在类的定义中出现的顺序一致。

3. 委托构造函数

  • 一个委托构造函数使用它所属类的其他构造函数执行它自己的初始化过程,如

    class Sales_data {
    public:
    	Sales_data(std::string s, unsigned cnt, double price) :
    		bookNo(s), units_sold(cnt), revenue(cnt * price) {}
    	
    	/// 
    	Sales_data() : Sales_data("", 0, 0){}
    	Sales_data(std::string s) : Sales_data(s, 0, 0) {}
    	Sales_data(std::istream& is) : Sales_data() { read(is, *this); }
    };

4. 隐式的类类型转换

  • 只允许一步类类型转换。
  • 抑制构造函数的隐式转换:可以将构造函数声明为explicit来实现
    • explicit只对一个实参的构造函数有效
    • explicit构造函数只能用于直接初始化,不能用于拷贝形式的初始化。
    • 可以对explicit构造函数显示地强制进行转换。

5. 聚合类

  • 当一个类满足以下形式,就是聚合类

    • 所有成员都是public
    • 没有定义任何构造函数
    • 没有类内初始值
    • 没有基类,没有virtual函数

    例如:

    struct Data {
    	int nVal;
    	std::string s;
    };

二、访问控制与封装

1. 使用class或struct关键字

  • 使用class或struct定义类唯一的区别是:class默认访问权限为private,struct默认访问权限为public。

2. 友元

  • 类可以通过将其他类或者函数设置成自身的友元实现其他类或者函数访问自身的非公有成员。


目录