首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非参数化构造函数的用途是什么?

非参数化构造函数的用途是什么?
EN

Stack Overflow用户
提问于 2021-10-21 07:46:46
回答 1查看 175关注 0票数 0

在非参数化构造函数中初始化类的数据成员有什么好处吗?比如,如果它不带参数,那么在非参数化构造函数中初始化类数据成员不就像直接在类中初始化值一样吗?示例:

代码语言:javascript
复制
class persons {
 private:
   int age, id;
public:
 persons(){
   age = 2;
   id = 3;
 }
};

-->我们还可以:

代码语言:javascript
复制
class persons {
 private:
   int age = 2, id = 3;
};

那么,默认构造函数的用途是什么呢?

EN

回答 1

Stack Overflow用户

发布于 2021-10-21 08:57:11

在旧的C++版本中,类中的属性声明不能包含初始化。换一种说法

代码语言:javascript
复制
class persons {
    int age = 3;
}

是不正确的,成员只能接收构造函数中的值。

但是初始化和赋值之间还是有区别的。这对于原始类型并不重要,但将对用户定义的类使用不同的特殊成员。

示例:

代码语言:javascript
复制
#include <iostream>

// dummy class displaying messages for initializations and assignment
class A {
    int val;

public:
    A(int x = 0) : val(x) {  // initializing constructor
        std::cerr << "Construction from " << x << "\n";
    }
    A& operator =(int x) {  // assignment operator
        val = x;
        std::cerr << "Assignment from " << x << "\n";
        return *this;
    }
};

// 3 classes showing various "initialization" methods
class B {
    A a = 2;     // initialization with an implicit default CTOR
};

class C {
    A a;

public:
    C() : a(3) {};   // initialization
};

class D {
    A a;         // default initialization

public:
    D() {
        a = 4;   // assignment
    }
};

int main() {
    B b;
    C c;
    D d;
    return 0;
}

输出结果确实是:

代码语言:javascript
复制
Construction from 2
Construction from 3
Construction from 0
Assignment from 4

成员声明时的特殊初始化在所有构造函数之间共享(可以是隐式的或显式的),并在构造函数的主体之前应用。在任何情况下,成员的初始化都按其声明的顺序应用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69657882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档