刚学了类和对象,如果自己定义了拷贝构造函数,那么编译器就不在提供默认构造函数和有参构造函数,这时候怎么才能创建出一个对象呢?
如果你在类中定义了拷贝构造函数,那么编译器将不会再自动为你生成默认构造函数和有参构造函数。但是,你仍然可以手动编写自己的构造函数来创建对象。
首先,你可以手动编写默认构造函数。默认构造函数不需要参数,可以在函数体中初始化对象的成员变量。例如:
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;
};
在上面的代码中,我们手动编写了一个有参构造函数,该函数接受三个参数,并将对象的成员变量初始化为这些参数的值。
你要加一个无参构造函数或者有参构造函数啊
可以再定义一个无参数构造函数。
不提供不等于不让你写
编译器不提供你自己写呀
什么都等编译器自动给你干,那还要程序员干啥