我一直在尝试理解默认构造函数,如果它是该类中唯一的构造函数,我想我会理解它。但是,如果我在类中定义了多个构造函数,该怎么办?我想要做的是创建一个类" vector",它将存储二维向量。我需要一个构造函数来将坐标设置为main函数中给出的值。我还需要一个默认的构造函数,在调用时,它会将坐标设置为0.我似乎无法弄清楚如何使两者都在相同的代码中工作
#include <iostream>
#include <string>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
class Vector {
double x_coord, y_coord;
public:
Vector(double x_coord=0, double y_coord=0); //default contructor???
Vector (double x, double y) //normal constructor
{
set_values (x,y);
}
void set_values(double new_x, double new_y) //function to set values for the vectors
{
x_coord=new_x;
y_coord=new_y;
}
double get_x()
{
return x_coord;
}
double get_y()
{
return y_coord;
}
};
答案 0 :(得分:2)
我可以想象使用以下方法构造类的对象:
Vector v1; // Construct with x = 0, y = 0
Vector v2(10); // Construct with x = 10, y = 0
Vector v3(10, 20); // Construct with x = 10, y = 20
只需一个构造函数即可完成所有这些:
Vector(double x=0, double y=0) : x_coord(x), y_coord(y) {}
您不需要第二个构造函数。
答案 1 :(得分:1)
默认构造函数是在定义class
的实例时省略parantheses时调用的构造函数。例如:
Vector vec;
这里,执行默认构造函数(Vector::Vector(double = 0, double = 0)
)。
您可以删除其他构造函数(Vector::Vector(double, double)
)并将此定义用于默认构造函数:
Vector(double x_coord = 0, double y_coord = 0) {
set_values(x_coord, y_coord);
}
当你传递两个参数时,会自动调用它。此外,解决了歧义:如果使用这两个构造函数,您通过了两个double
s?应该叫哪一个?编译器会引发错误,指出构造函数不明确。
注意:
set_values
函数似乎没有用,因为它没有做任何有用的工作。请在构造函数中使用成员初始值设定项列表来提高性能。此外,它被认为是好的风格:
Vector(double x_coord = 0, double y_coord = 0): x_coord(x_coord), y_coord(y_coord) { }
你对二传手和吸气剂的广泛使用看起来很糟糕。它破坏了封装。提供不公开实现细节但执行有用操作的函数,例如move
。
答案 2 :(得分:1)
没关系,我想通了。 如果有人需要答案: 您可以在Class
中定义默认构造函数和其他构造函数class Vector {
double x_coord, y_coord;
public:
Vector(): x_coord(0), y_coord(0) {}; //default constructor
Vector (double x, double y) //normal constructor
{
set_values (x,y);
}
它就是你定义默认构造函数的方式。