C ++构造函数中参数的默认值

蓝标

我是否可以像方法1中一样立即指定默认值,还是应该像方法2中那样使用重载的构造函数,还是像方法3/4中那样使用初始化列表?

哪种方法更好/正确的方法以及原因(所有方法似乎都可行)?

方法3和方法4有什么区别-我应该先指定构造函数声明,然后在类外部指定下一个定义,还是可以立即指定定义?

方法1:

#include <iostream>
#include <string>
using namespace std;
const string GLOBAL_VAR = "XXX";

class Object
{
private:
    string var;

public:
    Object(string inArg = "yyy")
    {
        this->var = GLOBAL_VAR + inArg + "ZZZ";
    }

    string show()
    {
        return this->var;
    }
};


int main() {
    Object o1, o2("www");
    cout << o1.show() << endl;
    cout << o2.show() << endl;

    system("pause");
}

方法2:

#include <iostream>
#include <string>
using namespace std;
const string GLOBAL_VAR = "XXX";

class Object
{
private:
    string var;

public:
    Object()
    {
        this->var = GLOBAL_VAR + "yyyZZZ";
    }

    Object(string inArg)
    {
        this->var = GLOBAL_VAR + inArg + "ZZZ";
    }

    string show()
    {
        return this->var;
    }
};


int main() {
    Object o1, o2("www");
    cout << o1.show() << endl;
    cout << o2.show() << endl;

    system("pause");
}

方法3:

#include <iostream>
#include <string>
using namespace std;
const string GLOBAL_VAR = "XXX";

class Object
{
private:
    string var;

public:
    //declaration:
    Object();
    Object(string);

    string show()
    {
        return this->var;
    }
};
//definition:
Object::Object() : var(GLOBAL_VAR + "yyyZZZ") {}
Object::Object(string inArg) : var(GLOBAL_VAR + inArg + "ZZZ"){}


int main() {
    Object o1, o2("www");
    cout << o1.show() << endl;
    cout << o2.show() << endl;

    system("pause");
}

方法4:

#include <iostream>
#include <string>
using namespace std;
const string GLOBAL_VAR = "XXX";

class Object
{
private:
    string var;

public:
    //declaration and definition in one:
    Object() : var(GLOBAL_VAR + "yyyZZZ") {}
    Object(string inArg) : var(GLOBAL_VAR + inArg + "ZZZ") {}

    string show()
    {
        return this->var;
    }
};


int main() {
    Object o1, o2("www");
    cout << o1.show() << endl;
    cout << o2.show() << endl;

    system("pause");
}
山姆·瓦尔沙夫奇克

我认为这两种方法都同样有效。根据每个类别的具体情况,每种方法都有其优点,优点和缺点。

无论是否需要默认构造函数参数,都需要以几乎相同的方式初始化对象时,使用默认值通常是最佳选择。指定默认值可避免重复代码。您只有一个构造函数。

另一方面,使用重载的构造函数可以以完全不同的方式完全干净地构造对象,具体取决于是否指定了参数。if在这种情况下,强制类具有单个构造函数通常会导致用一堆语句对代码进行轰炸

另外,不要忘记第三个选项:委托构造函数。在示例代码中使用该类:

Object() : Object("")
{
}

这种方法也有其固有的优点。

通常,对于哪种方法最好,目前尚无共识。最好考虑每个班级的个别要求,然后选择最适合该班级的方法。对于一个班级来说最好的方法可能不是另一个班级的最好方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++构造函数中参数的默认值

来自分类Dev

在 C++ struct 中,构造函数中的默认值和默认参数有什么区别?

来自分类Dev

C ++中隐式Default构造函数的默认值

来自分类Dev

C#记录构造函数参数默认值为空IEnumerable

来自分类Dev

C++,构造函数中允许引用参数默认值

来自分类Dev

如何确定函数参数是自动设置为默认值还是在C ++中显式设置?

来自分类Dev

在C ++中处理可选参数/默认值的最佳方法

来自分类Dev

如何在C#中在运行时将默认值分配给函数参数

来自分类Dev

c ++ 11首先是什么?构造函数或默认值?

来自分类Dev

在类C ++中使用构造函数为char数组提供默认值

来自分类Dev

在C ++中由double默认构造函数分配的值

来自分类Dev

存在具有默认参数的构造函数时,c ++构造函数中的歧义

来自分类Dev

C ++模板构造函数默认参数

来自分类Dev

函数参数默认值std:vector是否使用Rcpp和C ++ 11初始化?

来自分类Dev

为什么C ++不允许将函数参数用作默认值?

来自分类Dev

在C#中设置默认值

来自分类Dev

struct c中的默认值[重复]

来自分类Dev

C ++中类成员的默认值

来自分类Dev

在C#中设置默认值

来自分类Dev

turbo c 中的默认值

来自分类Dev

在构造函数中传递默认值

来自分类Dev

C ++ 11:使用非静态成员函数作为类构造函数中的默认参数

来自分类Dev

如何在C#中为委托类型的参数提供默认值?

来自分类Dev

C ++默认值

来自分类Dev

如何在C ++中“默认构造函数”

来自分类Dev

C++ std::list 参数与默认值

来自分类Dev

在函数定义中指定参数默认值会导致错误C2143:语法错误:在'='之前缺少')'

来自分类Dev

C ++:noexcept(或throw())虚拟析构函数=默认值;

来自分类Dev

具有参数默认值的构造函数

Related 相关文章

  1. 1

    C ++构造函数中参数的默认值

  2. 2

    在 C++ struct 中,构造函数中的默认值和默认参数有什么区别?

  3. 3

    C ++中隐式Default构造函数的默认值

  4. 4

    C#记录构造函数参数默认值为空IEnumerable

  5. 5

    C++,构造函数中允许引用参数默认值

  6. 6

    如何确定函数参数是自动设置为默认值还是在C ++中显式设置?

  7. 7

    在C ++中处理可选参数/默认值的最佳方法

  8. 8

    如何在C#中在运行时将默认值分配给函数参数

  9. 9

    c ++ 11首先是什么?构造函数或默认值?

  10. 10

    在类C ++中使用构造函数为char数组提供默认值

  11. 11

    在C ++中由double默认构造函数分配的值

  12. 12

    存在具有默认参数的构造函数时,c ++构造函数中的歧义

  13. 13

    C ++模板构造函数默认参数

  14. 14

    函数参数默认值std:vector是否使用Rcpp和C ++ 11初始化?

  15. 15

    为什么C ++不允许将函数参数用作默认值?

  16. 16

    在C#中设置默认值

  17. 17

    struct c中的默认值[重复]

  18. 18

    C ++中类成员的默认值

  19. 19

    在C#中设置默认值

  20. 20

    turbo c 中的默认值

  21. 21

    在构造函数中传递默认值

  22. 22

    C ++ 11:使用非静态成员函数作为类构造函数中的默认参数

  23. 23

    如何在C#中为委托类型的参数提供默认值?

  24. 24

    C ++默认值

  25. 25

    如何在C ++中“默认构造函数”

  26. 26

    C++ std::list 参数与默认值

  27. 27

    在函数定义中指定参数默认值会导致错误C2143:语法错误:在'='之前缺少')'

  28. 28

    C ++:noexcept(或throw())虚拟析构函数=默认值;

  29. 29

    具有参数默认值的构造函数

热门标签

归档