7.5.1 构造函数初始化列表
  如果成员是const、引用,或者属于某种未提供默认构造函数的类类型,我们必须通过构造函数初始值列表为这些成员提供初值。
  成员的初始化顺序与他们在类定义中的出现顺序一致。
  如果一个构造函数为所有参数都提供了默认实参,则它实际上也定义了默认构造函数。
7.5.2 委托构造函数
  一个委托构造函数使用它所属类的其他构造函数执行它自己的初始化过程,或者说它把它自己的一些(或者全部)职责委托给了其他构造函数。
  当一个构造函数委托给另一个构造函数时,受委托的构造函数的初始值列表和函数体被依次执行,之后控制权才会还给委托者的函数体。
7.5.3 默认构造函数的作用
  当对象被默认初始化或值初始化时自动执行默认构造函数。
7.5.4 隐式的类类型转换
  如果构造函数只接受一个实参,则它实际上定义了转换为此类类型的隐式转换机制,有时我们把这种构造函数称作转换构造函数。
  编译器只会自动地执行一步类型转换。
  我们可以将只有一个实参的构造函数声明为explicit以抑制隐式转换,并且只能在类内声明构造函数时使用explicit关键字,在类外部定义时不应重复。
  在执行拷贝形式的初始化时也会发生隐式转换。
7.5.5 聚合类
  一个类满足如下条件,我们称它是聚合的:1.所有成员都是public的 2.没有定义任何构造函数 3.没有类内初始值 4.没有基类,也没有virtual函数
7.5.6 字面值常量类
  数据成员都是字面值类型的聚合类是字面值常量类。
  一个类满足下述要求,则它也是一个字面值常量类:1.数据成员都必须是字面值类型 2.类必须至少含有一个constexpr构造函数 3.如果一个数据成员含有类内初始值,则内置类型成员的初始值必须是一条常量表达式;或者如果成员属于某种类类型,则初始值必须使用成员自己的constexpr构造函数。 4.类必须使用析构函数的默认定义,该成员负责销毁类的对象。
  事实上,一个字面值常量类必须至少提供一个constexpr构造函数。
  constexpr构造函数体一般来说应该是空的。
7.6 类的静态成员
  类的静态成员存在于任何对象之外,对象中不包含任何与静态数据成员有关的数据。
  类似的,静态成员函数不与任何对象绑定在一起,它们不包含this指针。  
  我们使用作用域运算符直接访问静态成员。虽然静态成员不属于类的某个对象,但是我们仍然可以使用类的对象、引用或者指针来访问静态成员。
  当在类的外部定义静态成员时,不能重复static关键字,该关键字只能出现在类内部的声明语句。
  类似于全局变量,静态数据成员定义在任何函数之外,一旦它被定义,就将一直存在于程序的整个生命周期中。
  通常情况下,类的静态成员不应该在类的内部初始化。然而,我们可以为静态成员提供const整数类型的类内初始值,不过要求静态成员必须是字面值常量类型的constexpr。
  特别的,静态数据成员的类型可以就是它所属的类类型。而非静态数据成员则受到限制,只能声明成它所属类的指针或引用。静态成员和普通成员的另外一个区别是我们可以使用静态成员作为默认实参。

《C++ Primer》〓〓〓〓〓〓〓〓〓〓【第七章】的更多相关文章

  1. 〓经典文字MUD武侠游戏 我的江湖 〓

    〓经典文字MUD武侠游戏 我的江湖 〓 我的江湖(FFLIB)基于地狱内核扩展,目前已扩展了很多实用功能! 我的江湖玩法 和掌心西游.书剑.东方故事.侠缘.武林等玩法大同小异 但扩展了更多好玩的玩法, ...

  2. C primer plus 练习题 第七章

    1. #include <stdio.h> #define SPACE ' ' #define NEWLINE '\n' int main() { int spaces,newlines, ...

  3. C++Primer 第七章

    //1.定义在类内部的函数是隐式内联的. //2.默认情况下,this指针的类型是指向类类型非常量版本的常量指针.对于类的常量成员函数的声明方法是:将const放置于成员函数的参数列表后,用于修饰th ...

  4. C++ Primer:第七章:类

    定义一个类: class Myclass{ int data_i; string data_str; public: int getdata_i() const { return data_i; } ...

  5. C primer plus 读书笔记第六章和第七章

    这两章的标题是C控制语句:循环以及C控制语句:分支和跳转.之所以一起讲,是因为这两章内容都是讲控制语句. 第六章的第一段示例代码 /* summing.c --对用户输入的整数求和 */ #inclu ...

  6. c++ primer plus 第七章 课后题答案

    #include <iostream> using namespace std; double HAR_AVG(double, double); void TEST(bool); int ...

  7. c primer plus(五版)编程练习-第七章编程练习

    1.编写一个程序.该程序读取输入直到遇到#字符,然后报告读取的空格数目.读取的换行符数目以及读取的所有其他字符数目. #include<stdio.h> #include<ctype ...

  8. C++ Primer Plus学习:第七章

    C++入门第七章:函数-C++的编程模块 函数的基本知识 要使用C++函数,必须完成如下工作: 提供函数定义 提供函数原型 调用函数 库函数是已经定义和编译好的函数,可使用标准库头文件提供原型. 定义 ...

  9. C++ Primer读书笔记(一)第一篇:C++概述,第一章:开始

    1. 主要内容 介绍程序语言的核心思想和C++的基本概念. 印象比较深刻的就是分而治之(divide and conque)的分解思想. 2. 知识广场 1) C++ 文件后缀 cc, cpp,,cx ...

随机推荐

  1. ES6——介绍

    什么是ES6? ECMAScript 6.0 (简称ES6)是继ECMAScript 5.1 之后 JavaScript 语言的下一代标准,发布在2015年6月.他的目标,是使得 JavaScript ...

  2. oracle goldengate的两种用法

    此文已由作者赵欣授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 自从oracle收购来了goldengate这款产品并以后对它做了一系列改进后,有非常多的用户使用它做数据迁移 ...

  3. UI Automator Viewer的使用

    uiautomatorviewer是android SDK自带的工具.通过截屏并分析XML布局文件的方式,为用户提供控件信息查看服务.该工具位于SDK目录下的tools\bin子目录下.可以看到,它是 ...

  4. myeclipse部署项目到tomcat-custom_location 方式

    在想要部署的路径下:1.新建一个在tomcat--->server.xml文件夹下设置的文件名 2.在新建的文件夹下新建一个  ROOT文件夹, 3.在myeclipse里面吧项目部署到 ROO ...

  5. 如何在NSDocumentDirectory内新建一个文件夹

    iOS下载文件一般保存到NSDocumentDirectory内,但是为了更好整理文件内容,那就要自定义的生成一些文件夹,和做一些删除文件夹的操作. - (NSString *)pathToPatie ...

  6. python高级(六)——用一等函数实现设计模式

    本文主要内容 经典的“策略”模式 python高级——目录 文中代码均放在github上:https://github.com/ampeeg/cnblogs/tree/master/python高级 ...

  7. Windows搭建Go语言环境·

    对于Windows用户,Go语言提供两种安装方式(源码安装除外): .MSI安装:程序会自动配置你的安装 .ZIP安装:需要你手动设置一些环境变量 一.MSI安装 1.下载安装包(根据操作系统选择相应 ...

  8. next_permutation(全排列)

    废话不多说,直接上代码,谁测试,谁知道 C++: #include<bits/stdc++.h> using namespace std; typedef long long ll; in ...

  9. STM32的GPIO工作原理 | 附电路图详细分析

    STM32的GPIO介绍 STM32引脚说明 GPIO是通用输入/输出端口的简称,是STM32可控制的引脚.GPIO的引脚与外部硬件设备连接,可实现与外部通讯.控制外部硬件或者采集外部硬件数据的功能. ...

  10. localStorage、sessionStorage用法总结

    1.作用 1.1 共同点:       都是用来存储客户端临时信息的对象.       均只能存储字符串类型的对象(虽然规范中可以存储其他原生类型的对象,但是目前为止没有浏览器对其进行实现). 1.2 ...