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 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程