美文网首页
【C++面向对象备忘录】1 基础

【C++面向对象备忘录】1 基础

作者: shawn233 | 来源:发表于2018-02-27 16:45 被阅读0次

    类定义的一般格式

    class 类名 {
        [private:]
            私有数据成员和成员函数
        public:
            公有数据成员和成员函数
    };
    
    • 数据成员一般是私有的
    • 成员函数一般是公有的
    • 成员函数实现时分解出的小函数是私有的

    this指针

    每个成员函数都有一个隐藏的指向本类型的指针形参this,它指向当前调用成员函数的对象

    如对函数

    void create(int n, int d) { num = n; den = d;}
    

    经过编译后,实际函数为

    void create(int n, int d) 
        { this->num = n; this->den = d;}
    
    • 通常,在写成员函数时可以省略this,编译时会自动加上它们。
    • 如果在成员函数中要把对象作为整体来访问时,必须显式地使用this指针。这种情况常出现在函数中返回一个对调用函数的对象的引用(如return * this;)

    必须在初始化列表中初始化的情况

    • 数据成员不是普通的内置类型,而是某一个类的对象,可能无法直接用赋值语句在构造函数体中为它赋初值
    • 类包含了一个常量的数据成员,常量只能在定义时对它初始化,而不能对它赋值。因此也必须放在初始化列表中

    【BUG】如果类成员有指针,而拷贝的时候只拷贝了指针,则可能在一个对象析构时,导致其他对象的数据丢失。

    拷贝构造函数的应用场合

    • 对象用拷贝构造定义时,有两种情况,见下方。
    Class obj1(args...);
    
    //Type1
    Class obj2 (obj1);
    
    //Type 2
    Class obj = Class(args...); //先构造临时对象,再拷贝构造obj对象
    Class obj2 = obj1;
    
    • 把对象作为参数传给函数时。注意如果是引用传递就没有这个过程。

    • 把对象作为返回值时(与编译器有关,VS一定会用拷贝构造)。

    对象的生命周期

    • 创建顺序:遇到变量定义时调用构造函数。与普通的内置类型的变量完全相同。

    • 消失顺序:

    1. 局部变量先消失,然后是静态局部变量, 最后是全局变量;
    2. 后创建的先消失。

    相关文章

      网友评论

          本文标题:【C++面向对象备忘录】1 基础

          本文链接:https://www.haomeiwen.com/subject/bdrmxftx.html