C++ explicit 使用方法

修饰只有一个参数的类构造函数。

没有explicit修饰的构造函数是隐式构造函数,被explicit修饰的是显式构造函数。相反的implicit修饰的是隐式构造函数。

什么是显式构造和隐式构造呢?

先说隐式构造函数:

class A {
private :
    int a;
    char b;
public :
    A (int _a) { // 一号函数
        a = _a;
    }

    A (char c) { // 二号函数
        b = c;
    }
};

int main ()
{
    A class1 (12); // 此处调用的是一号函数
    A class2 ('c'); // 此处调用的还是一号函数
}

上述代码中不同的初始化方法,调用的是相同的构造函数。

class A {
    int a;
    char b;
public :
    explicit A (int _a) {
        a = _a;
    }

    A (char _b) { // 二号
        b = _b;
    }
};

int main ()
{
    A class1 (3); // 这样没有问题,显式构造函数就是这个
    A class2 ('g'); // 这样也可以,调用了二号函数
}

实验结果如下:

#include <iostream>

using namespace std;

class A {
int a;
char b;
public :
    A (int _a) {
        a = _a;
    }

    B (char _b) {
        b = _b;
        cout << "Sdadsad: " << _b << endl;
    }

    int ret1 () {return a;}
    char ret2 () {return b;}
};

class B {
int a;
char b;
public :
    explicit B (int _a) {
        a = _a;
    }

    B (char _b) {
        b = _b;
    }

    int ret1 () {return a;}
    char ret2 () {return b;}
};

int main ()
{
    A class1 (12);
    A class2 ('P');

    cout << class1.ret1 () << endl;
    cout << class1.ret2 () << endl;
    cout << class2.ret1 () << endl;
    cout << class2.ret2 () << endl << endl;

    B class3 (3);
    B class4 ('h');

    cout << class3.ret1 () << endl;
    cout << class3.ret2 () << endl;
    cout << class4.ret1 () << endl;
    cout << class4.ret2 () << endl << endl;
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值