具有类c ++的常规构造函数的默认构造函数

时间:2015-12-31 22:05:38

标签: c++ class constructor default-constructor

我一直在尝试理解默认构造函数,如果它是该类中唯一的构造函数,我想我会理解它。但是,如果我在类中定义了多个构造函数,该怎么办?我想要做的是创建一个类" 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;
    }

};

3 个答案:

答案 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);
}

它就是你定义默认构造函数的方式。