zoukankan      html  css  js  c++  java
  • C++之类和对象——C++ primer plus学习(一)

    一、类的构造函数和析构函数

    1、构造函数:
        1)试图将类成员名称用作构造函数的参数名是错误的。
        2)构造函数的参数表示的不是类成员, 而是赋给类成员的值。
        3)为了避免这种混乱,一种常见的做饭实在类成员名中使用m_前缀;
    2、使用构造函数:
        1)显式的调用构造函数:
            Stock food = Stock("world Cabbage", 250, 2);
        2)隐式的调用构造函数:
            Stock food("world Cabbage", 250, 2);
        以上两种方法是等价的;

        3)无法使用对象来调用构造函数,因为在构造函数构造出对象之前,对象是不存在的, 因此构造函数被用来创建对象,而不能通过对象来调用。

    3、默认构造函数:
        1)默认构造函数是在未提供显示初始值时,用来创建对象的构造函数。    
            如:Stock fluffy_the_cat;
        2)构造函数没有参数,因为声明中不包含值。
        3)当且仅当没有定义任何构造函数时,编译器才会提供默认构造函数。

      **4)为类定义了构造函数后,就必须为它提供默认构造函数。如果只提供了非默认构造函数,但没有提供默认构造函数,声明:Stock stock1,将出错;

      **5)如果要创建对象,而不进行显式的初始化,则必须定义一个不接受任何参数的默认构造函数。

     ***6)定义默认构造函数的方法有两种:
            a:一种是给已有构造函数的已有参数提供默认值:Stock(const string & co = "Error", int m = 0; double pr = 0.0);
            b:另一种方式是通过函数重载来定义另一个构造函数——一个没有任何参数的构造函数:Stock();
         注:由于只能有一个构造函数,所以以上两种方法只能用一个;通常给所有的成员提供隐式初始值。
             so:在设计类时,通常应该提供对所用数据成员做隐式初始化的默认构造函数。
        7)隐式的调用默认构造函数时,不用圆括号;

    4、析构函数:
        1)用来完成对象的清理工作;
        2)原型必须是:~classname();
        3)由于在类对象过期时,析构函数将被自动调用,所比必须有一个析构函数,如果程序员未定义析构函数,编译器将隐式的声明一个默认的析构函数。


    5、C++11列表初始化:
        1)将列表初始化语法用于类对象的初始化:
            如:Stock hot_tip = {"Derivatives", 250, 4.4};
                Stock jock {"age "};    //以上两种与定义默认构造函数的方法a(3.6.a)匹配,对象jock中,后两个参数将未默认值。
                Stock temp {};        //与默认构造函数匹配

    *6、const成员函数:
        1)为了保证函数不会修给调用其的对象,C++可以将const关键字放在函数括号的后面。如:void show() const;
        2)只要类方法不修改对象,就应该将其声明为const。


    二、this指针:

        *1、一般来说,所有的类方法都将this指针设置为调用其的对象的地址。
        *2、每个成员函数(包括构造函数和析构函数)都有一个this指针,this指针指向调用当前成员函数的对象。
        *3、如果要显式地引用整个对象时,可以使用表达式:*this,因为this是对象的地址,所以*this便是对象本身。

    三、对象数组:

        类是用户定义的类型,对象是类的实例。即对象是这种类的变量。每一个对象都存储自己的数据,而共享类方法。

        1、对象数组可以同时创建多个对象。
        2、创建对象数组的一般方案是:首先使用默认构造函数创建数组元素,然后用花括号中的构造函数将创建临时对象,然后将创建的临时对象的内容复制到相应的元素中。
        3、按照以上方案时,必须有默认构造函数。


  • 相关阅读:
    垃圾回收机制,正则模块
    日常模块
    文件路径带有字符串的处理方法
    QT进制之间的相互转换
    4-7 selectors模块
    4-5 异步IO模型
    4-4 多路复用IO模型
    4-3 非阻塞IO
    4-2 阻塞IO
    4-1 IO模型介绍
  • 原文地址:https://www.cnblogs.com/pxtj/p/3379207.html
Copyright © 2011-2022 走看看