C++显式构造函数和隐式构造函数

函数中参数的叫法:

  1. parameter一般认为叫参数;
  2. argument一般认为叫实参;
  3. 参数个数和实参个数是不一样的。
//对于A这么个类,有个构造函数
A(int a, int b, int c = 1)
	: a(m), b(n) {}

这里认为parameter参数需要3个,argument实参2个,3个肯定没问题(但是只要两个实参就够了)。

explicit关键字一般用在类的构造函数中,表示显式创建对象,编译器不能隐式转换构造。

见代码:

#include <iostream>
using namespace std;

class Fraction {
public:
	Fraction(int num, int den = 1)
		: m_numerator(num), m_denominator(den) {}

	/* 这是转换函数,如果有这个转换函数的话,会导致 ambiguous 二义性。
	operator double() const{
		return (double)m_numerator / (double)m_denominator;
	}
	*/

	double getValue() const{
		return (double)m_numerator / (double)m_denominator;
	}

	int getNumerator() const {
		return m_numerator;
	}

	int getDenominator() const {
		return m_denominator;
	}

	Fraction operator+(const Fraction& f) {
		return Fraction(
			this->getNumerator() + f.getNumerator(), 
			this->getDenominator() + f.getDenominator()
		);
	}

private:
	int m_numerator;	//分子
	int m_denominator;  //分母
};

int main(int argc, char** argv) {
	Fraction f(1, 2);
	Fraction res = f + 5; //编译器会显式地将 5 转换为 Fraction 类对象
	cout << res.getValue() << "\n\n";

	system("pause");
	return 0;
}

结果为:2.0

如果在构造函数前加个 explicit 。

pic2
如果加了explicit,编译器不能执行隐式转化。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值