函数中参数的叫法:
- parameter一般认为叫参数;
- argument一般认为叫实参;
- 参数个数和实参个数是不一样的。
//对于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 。
如果加了explicit,编译器不能执行隐式转化。