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初始化的指针成员,应当定义一个复制构造函数,以复制指向的数据(因为默认复制构造函数自会复制这个指针而不会复制指针指向的数据,这样在用析构函数释放内存时回导致同段内存被多次释放的问题),这被称为深度复制。

  • 相关阅读:
    javaIO流--Writer,Reader
    javaIO操作之字节输入流--InputStream
    javaIO操作之字节输出流--OutputStream
    java中IO操作
    java中的方法引用
    java中lamda表达式的应用
    java8接口定义增强
    java中的强大的枚举(基本没人用)
    java中的泛型
    详述 IntelliJ IDEA 远程调试 Tomcat 的方法
  • 原文地址:https://www.cnblogs.com/xumaomao/p/11068489.html
Copyright © 2011-2022 走看看