zoukankan      html  css  js  c++  java
  • 构造函数

    基本用法

    //类声明文件stock.h
    #ifndef UNTITLED_STOCK00_H
    #define UNTITLED_STOCK00_H
    
    #include <string>
    
    class Stock
    {
    private:
        std::string company_;
    public:
        Stock(); //默认构造函数
        Stock(const std::string &company);
        void show();
    };
    #endif //UNTITLED_STOCK00_H
    //类方法定义文件stock.cpp
    #include <iostream>
    #include <string>
    #include "stock00.h"
    
    void Stock::show()
    {
        std::cout<<company_<<std::endl;
    }
    
    Stock::Stock()
    {
        company_ = "xmm";
        std::cout<<"use default constructor"<<std::endl;
    }
    
    Stock::Stock(const std::string &company)
    {
        company_ = company;
        std::cout<<"use constructor"<<std::endl;
    }
    //使用文件main.cpp
    #include <iostream>
    #include "stock00.h"
    using namespace std;
    
    int main()
    {
        Stock S; //调用默认构造函数
        //注意:Stock S();声明了一个返回Stock的函数而不是调用默认构造函数
        S.show();
    
        Stock S1("xumaomao"); //隐式的调用构造函数
        //Stock S1 = Stock("xumaomao"); //显式的调用构造函数
        S1.show();
        return 0;
    }

    必须使用列表初始化的情况

    class ConstRef
    {
    public:
        ConstRef(int ii);
    private:
        int i;
        const int ci;
        int &ri;
    };
    
    ConstRef::ConstRef(int ii): i(ii), ci(ii), ri(i) {}

     注意:成员初始化的顺序与它们在类定义中出现的顺序一致。

    复制构造函数

    新建一个对象并将其初始化为同类现有对象时,复制构造函数都将被调用。

    以下4中情况都将调用复制构造函数:

    StringBad ditto(motto);
    StringBad metoo = motoo;
    StringBad also = StringBad(motto);
    StringBad * pStringBad = new StringBad(motto);

    注意:如果类中包含了使用new初始化的指针成员,应当定义一个复制构造函数,以复制指向的数据(因为默认复制构造函数自会复制这个指针而不会复制指针指向的数据,这样在用析构函数释放内存时回导致同段内存被多次释放的问题),这被称为深度复制。

  • 相关阅读:
    token是什么?和session什么区别,怎么用
    HashTable详解
    Cookie和Session的区别
    测试基础面试题
    什么是回归测试?回归测试的主要目的是什么?
    每天一个linux常用命令--ls 和 -ll 有什么区别?
    python中6个序列的内置类型分别是什么,列表和元组的异同有哪些
    今天去面试自动化测试,被几个问题问住了,记录下
    python排序算法-冒泡和快速排序,解答阿里面试题
    Myeclipse使用积累
  • 原文地址:https://www.cnblogs.com/xumaomao/p/11068489.html
Copyright © 2011-2022 走看看