美文网首页程序员
[C++进阶]了解C++默默编写并调用哪些函数

[C++进阶]了解C++默默编写并调用哪些函数

作者: 小鱼号的代码日记 | 来源:发表于2020-05-05 22:48 被阅读0次

    C++编译器默默生成的函数(public且inline)(如果自己没声明):

    Copy构造函数

    Copy assignment操作符

    析构函数

    Default构造函数

    详解:

    编译器产出的析构函数的虚属性主要来自base class

    编译器产出的copy构造函数和copy assignment操作符只是单纯地将来源对象的每一个n on-static成员变量拷贝到目标对象。(浅拷贝)

    /***************************
    effectivre c++
    改善程序与设计的55个具体做法
    条款5:了解C++默默编写并调用哪些函数
     ---------小鱼号的代码日记--------------
    ****************************/
    /**************************
     C++编译器默默生成的函数(public且inline)(如果自己没声明):
    
       Copy构造函数
       Copy assignment操作符
       析构函数
       Default构造函数
    
    编译器产出的析构函数的虚属性主要来自base class
    编译器产出的copy构造函数和copy assignment操作符只是单纯地将来源对象的每一个n on-static成员变量拷贝到目标对象。(浅拷贝)
    ***************************/
    #include<iostream>
    using namespace std;
    class Empty{};
    template<typename T>
    class NamedObjects{
    public:
        NamedObjects(const char* name,const T& value)
        {
    
        }
        NamedObjects(const std::string& name,const T& value)
        {
    
        }
        //由于其中声明了一个构造函数,编译器于是不再为它创建default构造函数。
    private:
        std::string nameValue;
        T objectValue;
    };
    template<typename T>
    class NamedObjectsPlus{
    public:
        //以下构造函数如今不再接受一个const名称,因为nameValue
        //如今是个reference-to-non-const string
        NamedObjectsPlus(std::string& name,const T& value):
            nameValue(name),
            objectValue(value)
        {
        }
    private:
        std::string& nameValue; //如今是个reference
        const T objectValue;    //如今是个const
    };
    
    int main()
    {
       Empty e1;      //default构造函数
                      //析构函数
       Empty e2(e1);  //copy构造函数
       e2 = e1;       //copy assignment操作符
    
       std::string str = "smallest prime number";
       NamedObjects<int> no1(str,2);
       NamedObjects<int> no2(no1);//调用copy构造函数
    
       std::string newDog("persephone");
       std::string oldDog("satch");
       const int newY = 2;
       const int oldY = 5;
       NamedObjectsPlus<int> p(newDog,newY);//我们的狗 两岁了
       NamedObjectsPlus<int> s(oldDog,oldY);//我们的狗 岁数很大的狗
       //p = s;//??????
       return 0;
    }
    
    
    
    

    内容选自:
    effectivre c++
    改善程序与设计的55个具体做法

    相关文章

      网友评论

        本文标题:[C++进阶]了解C++默默编写并调用哪些函数

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