这可能是不可取的!

虽然消极期望功能的一部分,我们给它一个整数而不是。然而,由于分数具有构造函数的愿意接受一个整数,编译器将使用此构造函数隐式转换为整数6转化为分数的对象,然后将其复制到makenegative()初始化参数F.
因此,上面的程序打印:
6 / 1
这种隐式转换为各种初始化(直接、统一和复制)。
用于隐式会话的构造函数被称为转换构造函数(或转换构造函数)。C++ 11之前,只有一个参数的构造函数以可转换构造函数。然而,随着新的统一的初始化语法在C++ 11,这个限制被解除,并以多个参数的构造函数可以转换构造函数。
明确的关键词

虽然做隐式转换在分数的情况下是有意义的,在其他情况下,这可能是不可取的,或导致意想不到的行为:

#include <cassert>
#include <iostream>
 
class Fraction
{
private:
	int m_numerator;
	int m_denominator;
 
public:
    // Default constructor
    Fraction(int numerator=0, int denominator=1) :
        m_numerator(numerator), m_denominator(denominator)
    {
        assert(denominator != 0);
    }
 
        // Copy constructor
	Fraction(const Fraction &copy) :
		m_numerator(copy.m_numerator), m_denominator(copy.m_denominator)
	{
		// no need to check for a denominator of 0 here since copy must already be a valid Fraction
		std::cout << "Copy constructor called\n"; // just to prove it works
	}
 
	friend std::ostream& operator<<(std::ostream& out, const Fraction &f1);
        int getNumerator() { return m_numerator; }
        void setNumerator(int numerator) { m_numerator = numerator; }
};
 
std::ostream& operator<<(std::ostream& out, const Fraction &f1)
{
	out << f1.m_numerator << "/" << f1.m_denominator;
	return out;
}
 
Fraction makeNegative(Fraction f) // ideally we should do this by const reference
{
    f.setNumerator(-f.getNumerator());
    return f;
}
 
int main()
{
    std::cout << makeNegative(6); // note the integer here
 
    return 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值