【发布时间】:2011-08-09 19:20:44
【问题描述】:
堆垛机朋友,
考虑以下头文件中的两个简单类:
Class CC
{
public:
CC(int& value);
C& operator=(const C& other);
{
cout<<" From copy constructor ";
}
int m_cc;
};
Class AA
{
public:
AA( CC& refCC);
CC m_cInstance;
}
.cpp 文件中包含以下内容。
CC:CC(int& value): m_cc(value)
{
cout<<" Constructor of CC" <<endl;
m_cc++;
}
AA:AA(CC& refCC): m_cInstance(refCC)
{
cout<<" The value of m_cc in refCC is: "<< refCC.m_cc;
cout<<" The address of m_cc in refCC is: "<< &refCC.m_cc;
cout<<" The address of refCC is: "<< &refCC;
cout<<" The value of m_cc in m_cInstance is: <<m_cInstance.m_cc;
cout<<" The address of m_cc in m_cInstance is: <<&m_cInstance.m_cc;
cout<<" The address of m_cInstance is: <<&m_cInstance;
}
我在 main.cpp 文件中以下列方式使用上述两个声明的简单类:
int cvalue = 1000; CC refCC(cvalue);
AA aaObj(refCC);
这是程序的输出:
Constructor of CC
The value of m_cc in refCC is: 1001
The address of m_cc in refCC is: 0x12ff20
The address of refCC is: 0x12ff20
The value of m_cc in m_cInstance is: 1001
The address of m_cc in m_cInstance is: 0x12ff14
The address of m_cInstance is: 0x12ff14
以下是一些观察:
注意,实例AA中m_cInstance的地址与refCC的地址不同。
虽然CC的实例是在AA的构造函数中通过引用(refCC)传递的,但成员变量“m_cInstance”本身就是一个单独的实例。
在创建“refCC”时调用 CC 实例的构造函数一次,即使在具有相同状态的程序中存在两个不同的 CC 实例。
从不调用重写的赋值运算符。
我的问题很简单:
不调用CC的构造函数或CC中定义的赋值运算符,如何在AA的构造函数中创建“m_cInstance”??
如果 CC 包含磁盘上文件的句柄作为成员变量?它在“m_cInstance”中的行为是什么??
谢谢,
德科斯托。
【问题讨论】:
-
1.您应该剪切并粘贴您的真实代码。您的构造函数有语法错误。 2.
operator=不是拷贝构造函数,它是赋值运算符。你是对的,你的代码从不使用它。它使用复制构造,但您尚未定义复制构造函数。 -
CC:CC(int& value)::m_cc(value)应该是CC::CC(int& value):m_cc(value)你在这里输入代码了吗? -
行 "AA:AA(CC& refCC): m_cc(refCC)" 永远不会编译,因为你在 "AA" 类中没有成员 "m_cc"。因此,您没有发布您要询问的代码。问代码 X 和邮政编码 Y 是很愚蠢的。
-
这里 CC:CC(int& value) 和这里 AA:AA(CC& refCC) 仍然缺少
colon
标签: c++ constructor scope initialization