C++ 对象的隐式转换。
我用Visual Studio 2008编写如如下代码:
相关代码与执行结果的对应关系如下:
Human a(26); // 构造函数被执行
a.Print(); // 26 183
a = 27; // 构造函数被执行 析构函数被执行,相当于a = Human(27),但是没有调用复制构造函数,为什么?
a.Print(); // 27 183
return 0; // 析构函数被执行,对象a被析构掉
我的问题是红颜色的文字部分,谢谢。
#include <iostream>
using namespace std;
class Human
{
public:
Human(int nAge)
{
m_nAge = nAge;
m_nHeight = 183;
cout << "构造函数被执行" << endl;
}
Human(Human& man)
{
m_nAge = man.m_nAge;
m_nHeight = man.m_nHeight;
cout << "复制构造函数被执行" << endl;
}
~Human()
{
cout << "析构函数被执行" << endl;
}
void Print()
{
cout << m_nAge << "\t" << m_nHeight << endl;
}
private:
int m_nAge;
int m_nHeight;
};
int main()
{
Human a(26);
a.Print();
a = 27;
a.Print();
return 0;
}
相关代码与执行结果的对应关系如下:
Human a(26); // 构造函数被执行
a.Print(); // 26 183
a = 27; // 构造函数被执行 析构函数被执行,相当于a = Human(27),但是没有调用复制构造函数,为什么?
a.Print(); // 27 183
return 0; // 析构函数被执行,对象a被析构掉
我的问题是红颜色的文字部分,谢谢。
...全文
相关推荐
cpp代码-c++练习_数据类型
在C++中,类型转换是常见的操作,包括隐式转换(如`int`到`float`)和显式转换(如`static_cast<>()`、`dynamic_cast<>()`、`reinterpret_cast<
C++隐式转换问题分析及解决办法
C++隐式转换问题分析及解决办法C++隐式转换问题是编程中常见的问题之一,了解隐式转换的原理和规则对于编写高效、安全的代码至关重要。本文将对C++隐式转换问题进行分析,并提供解决办法。
C++ Explicit关键字详细解析
在C++编程语言中,`explicit`关键字是一个非常重要的特性,它主要用于控制类的构造函数如何参与类型转换。本文将详细解析`explicit`关键字的用途、意义以及它如何影响类对象的创建和赋值。
C++ operator两种用法.docx
二、operator casting(操作隐式转换)operator casting是C++中的一种机制,允许用户自定义隐式转换的行为,以便在不同的数据类型之间进行转换。
c++类的隐式转换与强制转换重载详解
在C++编程中,类的隐式转换和强制转换是两个关键的概念,它们允许程序员在不同数据类型之间灵活地转换。隐式转换是编译器自动进行的转换,而强制转换则是程序员通过特定语法明确指示的转换。


