2201_75347713 2023-03-22 13:06 采纳率: 100%
浏览 20
已结题

c++只有拷贝构造函数怎么创建对象

刚学了类和对象,如果自己定义了拷贝构造函数,那么编译器就不在提供默认构造函数和有参构造函数,这时候怎么才能创建出一个对象呢?

  • 写回答

5条回答 默认 最新

  • 海洋 之心 2022年度博客之星人工智能领域TOP 1 2023-03-22 18:48
    关注

    如果你在类中定义了拷贝构造函数,那么编译器将不会再自动为你生成默认构造函数和有参构造函数。但是,你仍然可以手动编写自己的构造函数来创建对象。

    首先,你可以手动编写默认构造函数。默认构造函数不需要参数,可以在函数体中初始化对象的成员变量。例如:

    class MyClass {
    public:
        // 手动编写默认构造函数
        MyClass() {
            // 初始化对象的成员变量
            m_int = 0;
            m_double = 0.0;
            m_string = "";
        }
    
        // 手动编写拷贝构造函数
        MyClass(const MyClass& other) {
            m_int = other.m_int;
            m_double = other.m_double;
            m_string = other.m_string;
        }
    
    private:
        int m_int;
        double m_double;
        std::string m_string;
    };
    

    在上面的代码中,我们手动编写了一个默认构造函数,该函数将对象的所有成员变量初始化为默认值。

    如果你需要手动编写有参构造函数,那么可以根据参数列表的不同来重载构造函数。例如:

    class MyClass {
    public:
        // 手动编写默认构造函数
        MyClass() {
            // 初始化对象的成员变量
            m_int = 0;
            m_double = 0.0;
            m_string = "";
        }
    
        // 手动编写有参构造函数
        MyClass(int i, double d, const std::string& s) {
            m_int = i;
            m_double = d;
            m_string = s;
        }
    
        // 手动编写拷贝构造函数
        MyClass(const MyClass& other) {
            m_int = other.m_int;
            m_double = other.m_double;
            m_string = other.m_string;
        }
    
    private:
        int m_int;
        double m_double;
        std::string m_string;
    };
    

    在上面的代码中,我们手动编写了一个有参构造函数,该函数接受三个参数,并将对象的成员变量初始化为这些参数的值。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 3月30日
  • 已采纳回答 3月22日
  • 创建了问题 3月22日

悬赏问题

  • ¥15 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了