C++ 实例化 "Implicit" Class 对象
C++ Instantiating "Implicit" Class Object
class Cents
{
private:
int m_nCents;
public:
Cents(int nCents) { m_nCents = nCents; }
// Overload cCents + int
friend Cents operator+(const Cents &cCents, int nCents);
int GetCents() { return m_nCents; }
};
// note: this function is not a member function!
Cents operator+(const Cents &cCents, int nCents)
{
return Cents(cCents.m_nCents + nCents);
}
int main()
{
Cents c1 = Cents(4) + 6;
std::cout << "I have " << c1.GetCents() << " cents." << std::endl;
return 0;
}
我不清楚表达式
Cents(4)+6
排队
Cents c1 = Cents(4) + 6;
被评价。
是的,我知道我们分别为 Cents 和 int 类型的操作数重载了运算符“+”。
据我了解,Censt(4) 是构造函数,对吗?所以当
Cents operator+(const Cents &cCents, int nCents)
{
return Cents(cCents.m_nCents + nCents);
}
调用 cCenst 是否成为 Cents(4) 的引用?
来自行
return Cents(cCents.m_nCents + nCents);
可以推断 cCenst 是 Censt 类型的对象,因为我们通过成员选择运算符“.”访问 m_nCents。但是 Censt(4) 是构造函数而不是 class 对象。
对我来说,cCenst 引用 Cents(4) 似乎没有意义,因为它们不等价。
构造函数将创建对象,因此在您获得一个对象和一个 int 之后它将获取该对象。
它不完全是一个引用,它是一个 const 引用,因此您之前不需要创建它,因为该对象无法修改。
As I understand Censt(4) is the constructor, right?
不,不完全是。你永远不会直接调用构造函数,即使这种语法使它看起来有点像你那样做。
这里你正在构造一个 Censt
类型的临时对象,构造函数参数为 4
.
更像这样想:
Censt x(4); // creates a `Censt` with name `x` from argument `4`
Censt(4); // creates a `Censt` with no name from argument `4`
它不是函数调用。
does cCenst become a reference to Cents(4)?
是的。
But Censt(4) is a constructor and not a class object.
同样,不。它是一个对象。
As I understand Censt(4) is the constructor, right?
Cents(4)
是一个表达式,它创建一个 Cents
对象(导致调用构造函数)。计算表达式的结果就是这样创建的对象。
So when [...] is called does cCenst become a reference to Cents(4)?
它成为对计算 Cents(4)
子表达式时创建的对象的引用。
From the line return Cents(cCents.m_nCents + nCents);
one can deduce that cCenst is an object of type Censt since we access m_nCents via member selection operator "."
cCents
是 const Cents &
类型,因为它是这样声明的。
But Censt(4) is a constructor and not a class object.
Cents(4)
是一个表达式。它不是构造函数。详细说明:它是一个表达式,需要调用构造函数来计算,并产生一个 Cents
对象。
表达式中:
Cents c1 = Cents(4) + 6;
首先评估子表达式(根据运算符优先级等)。因此,Cents(4)
被评估并成为 Cents
对象。整个表达式可以被认为是:
Cents c1 = <a-newly-created-Cents-object> + 6;
<a-newly-created-Cents-object> + 6
部分由 next 通过调用定义的 +
运算符计算。在该运算符方法中,cCents
参数成为对 <a-newly-created-Cents-object>
.
的引用
class Cents
{
private:
int m_nCents;
public:
Cents(int nCents) { m_nCents = nCents; }
// Overload cCents + int
friend Cents operator+(const Cents &cCents, int nCents);
int GetCents() { return m_nCents; }
};
// note: this function is not a member function!
Cents operator+(const Cents &cCents, int nCents)
{
return Cents(cCents.m_nCents + nCents);
}
int main()
{
Cents c1 = Cents(4) + 6;
std::cout << "I have " << c1.GetCents() << " cents." << std::endl;
return 0;
}
我不清楚表达式
Cents(4)+6
排队
Cents c1 = Cents(4) + 6;
被评价。 是的,我知道我们分别为 Cents 和 int 类型的操作数重载了运算符“+”。
据我了解,Censt(4) 是构造函数,对吗?所以当
Cents operator+(const Cents &cCents, int nCents)
{
return Cents(cCents.m_nCents + nCents);
}
调用 cCenst 是否成为 Cents(4) 的引用?
来自行
return Cents(cCents.m_nCents + nCents);
可以推断 cCenst 是 Censt 类型的对象,因为我们通过成员选择运算符“.”访问 m_nCents。但是 Censt(4) 是构造函数而不是 class 对象。
对我来说,cCenst 引用 Cents(4) 似乎没有意义,因为它们不等价。
构造函数将创建对象,因此在您获得一个对象和一个 int 之后它将获取该对象。 它不完全是一个引用,它是一个 const 引用,因此您之前不需要创建它,因为该对象无法修改。
As I understand Censt(4) is the constructor, right?
不,不完全是。你永远不会直接调用构造函数,即使这种语法使它看起来有点像你那样做。
这里你正在构造一个 Censt
类型的临时对象,构造函数参数为 4
.
更像这样想:
Censt x(4); // creates a `Censt` with name `x` from argument `4`
Censt(4); // creates a `Censt` with no name from argument `4`
它不是函数调用。
does cCenst become a reference to Cents(4)?
是的。
But Censt(4) is a constructor and not a class object.
同样,不。它是一个对象。
As I understand Censt(4) is the constructor, right?
Cents(4)
是一个表达式,它创建一个 Cents
对象(导致调用构造函数)。计算表达式的结果就是这样创建的对象。
So when [...] is called does cCenst become a reference to Cents(4)?
它成为对计算 Cents(4)
子表达式时创建的对象的引用。
From the line
return Cents(cCents.m_nCents + nCents);
one can deduce that cCenst is an object of type Censt since we access m_nCents via member selection operator "."
cCents
是 const Cents &
类型,因为它是这样声明的。
But Censt(4) is a constructor and not a class object.
Cents(4)
是一个表达式。它不是构造函数。详细说明:它是一个表达式,需要调用构造函数来计算,并产生一个 Cents
对象。
表达式中:
Cents c1 = Cents(4) + 6;
首先评估子表达式(根据运算符优先级等)。因此,Cents(4)
被评估并成为 Cents
对象。整个表达式可以被认为是:
Cents c1 = <a-newly-created-Cents-object> + 6;
<a-newly-created-Cents-object> + 6
部分由 next 通过调用定义的 +
运算符计算。在该运算符方法中,cCents
参数成为对 <a-newly-created-Cents-object>
.