zoukankan      html  css  js  c++  java
  • 第7章 类

    struct和class都是类,在一个项目中,将所有的class替换成struct,依旧可以正常运行。其最本质的区别就是,struct默认访问控制是public,class默认访问控制是private。还有一点区别就是:"class"这个关键字还用于定义模板参数,就像"typename",但关键字"struct"不用于定义模板参数。

    通常情况下,struct应该被看成是一个数据结构的实现体,class应该被看成一个对象的实现体。

    7.1.2

    this

    this是成员函数额外的隐式参数,其类型是CType *const this,是一个常量指针,不允许改变this中保存的地址。

    const

    string isbn() const {return bookNo;};    //常量成员函数

    在此处const的作用是修改隐式this指针的类型。使之便为const CType *const this,从向量指针,设置成指向常量的常量指针。这样的成员函数叫做常量成员函数。

    常量成员函数不能改变调用它的对象的内容。

    7.1.4 构造函数

    构造函数不能声明成const的。

    如果没有显式定义构造函数,编译器就会隐式定义一个默认构造函数,又被称为合成的默认构造函数。默认构造函数将按照如下规则初始化类的数据成员:

    1. 如果存在类内的初试值(struct中可以指明初始值),则初始化。
    2. 否则,默认初始化成员。

    一旦定义了其他的构造函数,编译器将不生成默认构造函数。除非再定义个默认构造函数。

    对于有些数据成员,比如数组指针,默认初始化之后将是未定义的值。没有提供默认构造函数类内成员,将无法执行默认初始化。

    自定义默认构造函数:

    ClassType() = default;

    构造函数初始值列表:

    ClassType(int p1, int p2):a1(p1),a2(p2) {}

    warming

    有些编译器不支持雷内成员的初值,这样只能在构造函数中给初始化。

     

    7.2.1

    友元(friend)

    类可以允许其他类或者函数访问他的非公有成员,方法是令其他类或者函数成为它的友元。

    令外部函数作为友元,直接在类内部声明函数,前置friend

    令其他类作为友元,在此类内:friend class ClassType

    令成员函数作为友元,在此类内:friend class ClassType::Function()

    7.3

    令成员作为内联函数

    定义在类内部的成员函数默认是inline的,外部需要显式指出

     

    重载成员函数

     

    可变数据成员

    变量声明前加入mutable关键字,这样即使在const函数中,也可以修改此成员变量。

    7.5.2 委托构造函数

    class CType
    {
    public:
        CType(string s){};
        //委托构造函数
        CType():CType("asdf"){};
    };

    7.5.4 隐式类类型转换

    若构造函数只接受一个实参,则它定义了这个实参类型向这个类类型转换的隐式转换机制。这种构造函数叫做转换构造函数。

    为了抑制这种转换,可以在构造函数前声明为:explicit

    7.5.5 聚合类

    1. 所有成员public
    2. 没有构造函数
    3. 没有类内初始值
    4. 没有积累,没有virtual函数

    这样就可以提供一个花括号初始值列表,初始化聚合类的数据成员。

    Data val1 = {0, "adsf"};

     

  • 相关阅读:
    Poemscape|Beta阶段第九天
    Poemscape|Beta阶段第八天
    Poemscape|Beta阶段第七天
    Poemscape|Beta阶段第六天
    Poemscape|Beta阶段第五天
    Poemscape|Beta阶段第四天
    Poemscape|Beta阶段第三天
    luffy-后台Response和异常封装、跨域问题解决、前后台打通、xadmin后台管理
    python项目的requirement.txt的生产的和使用
    路飞项目之项目前期准备
  • 原文地址:https://www.cnblogs.com/qiusuo/p/4483171.html
Copyright © 2011-2022 走看看