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

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

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

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

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;
};

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

你要加一个无参构造函数或者有参构造函数啊

可以再定义一个无参数构造函数。
不提供不等于不让你写

编译器不提供你自己写呀
什么都等编译器自动给你干,那还要程序员干啥