我试图在两个类之间转换,并避免临时对象.
这是我的声明Square:
class CSquare
{
public:
int dimension;
CSquare(int dimension);
// Conversion to Rectangle
operator CRectangle();
~CSquare(void);
};
Run Code Online (Sandbox Code Playgroud)
这是我的声明Rectangle:
class CRectangle
{
public:
int length;
int width;
CRectangle(int length, int width);
//Copy Constructor
CRectangle(const CRectangle& anotherRectangle);
~CRectangle(void);
};
Run Code Online (Sandbox Code Playgroud)
为什么
CSquare aSquare = CSquare(10);
CRectangle convertedRect = (CRectangle) aSquare;
Run Code Online (Sandbox Code Playgroud)
调用复制构造函数?
我有转换功能:
CSquare::operator CRectangle(){
return CRectangle(CSquare::dimension,CSquare::dimension);
}
Run Code Online (Sandbox Code Playgroud)
但我仍然得到一个临时对象.
我该如何避开临时对象?
您可以通过在CRectangle中编写转换构造函数来避免复制构造:
CRectangle::CRectangle(const CSquare & sq)
:length(sq.dimension),
width(sq.dimension)
{}
...
...
CSquare aSquare(10);
CRectangle convertedRect(aSquare);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
241 次 |
| 最近记录: |