为了保持简单和重点,我有一个班级
class square
{
public:
square(int s); // parameterized constructor with default parameter = 0
square();
private:
int side; // holds the side of the square (whole number)
};
square::square() {
side = 0;
}
square::square(int s){
side = 0; // parameterized constructor with default parameter = 0
}
在主要内容中我有以下内容:
int main()
{
square sq1;// declare 4 objects of type square named sq1, sq2, sq3, and sq4 initializing the third one to 10
square sq2;
square sq3(10);
square sq4;
}
问题是,如果我注释掉square();在课堂上,方形sq1,sq2和sq4不会起作用。 我需要将square(int s)初始化为默认构造函数设置为0,并且仅对所有四平方sq使用它。我该如何解决这个问题?
答案 0 :(得分:1)
完全删除默认构造函数(square();
)并修改参数化构造函数定义,如下所示。
square::square(int s = 0) {
side = s; // parameterized constructor with default parameter = 0
}
答案 1 :(得分:0)
在任何情况下,您都必须定义默认构造函数。来自C ++(2017)标准(15.1构造函数)
4 类X的默认构造函数是类X的构造函数 非函数参数包的每个参数都有一个 默认参数(包括没有的构造函数的情况) 参数)。如果类X没有用户声明的构造函数,则a 隐式声明没有参数的非显式构造函数 违约(11.4)。隐式声明的默认构造函数是一个 同类的内联公共成员。
因此,为了使带参数的构造函数成为默认构造函数,只需在构造函数的声明中提供一个默认参数。例如
class square
{
public:
square(int s = 0 ); // parameterized constructor with default parameter = 0
private:
int side; // holds the side of the square (whole number)
};
构造函数本身可以定义为
square::square( int s ) : side( s )
{
}
此外,您可以使用函数说明符explicit
声明构造函数,以防止从类型int
隐式转换为类型square
。
class square
{
public:
explicit square(int s = 0 ); // parameterized constructor with default parameter = 0
private:
int side; // holds the side of the square (whole number)
};