为什么是一个拷贝而不是一个引用?
一个程序中这样的一段代码:
Person::Person(const string& n, const string& a) : name(n)
{
address = a;
}
-------------------
书上说name(n)使用是n的一个拷贝,我感觉应该是n的一个引用才对啊。
难道书上写错了?请高手指教,谢谢
[解决办法]
name是什么类型,如果是int double类似的就是拷贝
[解决办法]
我也是第一次看到这种,函数后面还可以这样赋值???
[解决办法]
class Person
{
string name;
string address;
可以看出 name 是 Person 类内部包含的一个完整 string 对象——既然是对象,怎么会变成“引用”?
[解决办法]
[const] string Person::n; //拷贝
const string& Person::n; //引用
取决于你n的定义
[解决办法]
拷贝。
[解决办法]
初始化列表,是拷贝
[解决办法]
Person::Person(const string& n, const string& a) : name(n)//这里是初始化列表,相当于直接在name内存中赋值n
{
address = a;//这里是运算符操作,是地址传递,指向同一个内存地址
}
[解决办法]
取决于你name的定义
class Person
{
//string name;
string &name; //这样就会是引用了
string address;
Person(const Person&);
Person(const string&n, const string &a );
};
[解决办法]
想想
strign name = n;=> 拷贝
string &name = n;=> 引用
[解决办法]
对象的构造过程:基类的构造函数、数据成员初始化、构造函数
其中数据成员的初始化就是调用拷贝构造函数,如:
C a;
C b = a; //此处即调用拷贝构造函数