拷贝构造函数的1点疑问
拷贝构造函数的一点疑问
有如下代码:
我想把里面的拷贝构造函数改成:
行吗?刚才试了一下编译可以通过,而且可以得到正确结果。
本人菜鸟,弱弱问一下难倒非要用引用吗?用指针和引用有什么区别吗?我觉得引用应该就是一种特殊的指针吧?
------解决方案--------------------
可以的 你看一下引用和指针的区别就会明白了
------解决方案--------------------
CExample(const CExample *C)不是拷贝构造函数,于是编译器自动为你生成一个,参数类型为CExample const &。
编译时寻找到自动生成的拷贝构造函数,参数类型符合,所以编译通过。
------解决方案--------------------
拷贝构造函数的第一个参数必须是本类的引用,可以是const或是非const,其余参数必须都要有缺省值。如果没有符合要求的构造函数,编译器会自动生成一个。编译器自动生成的拷贝构造函数可见性为public,参数为const引用,实现为调用所有基类的拷贝构造函数和所有数据成员的拷贝构造函数。
拷贝构造函数不能是模板形式,如果你声明为模板,编译器会自动生成一个拷贝构造函数,然后调用时不会去实例化的模板。
使用指针类型在MyClass a; MyClass(b);参数类型不匹配,不是拷贝构造。
------解决方案--------------------
那你使用的时候,岂不是这样?
CExample A;
CExample B=&A;
有如下代码:
#include <iostream>
using namespace std;
class CExample {
private:
int a;
public:
//构造函数
CExample(int b)
{ a = b;}
//拷贝构造函数
CExample(const CExample& C)
{
a = C.a;
}
//一般函数
void Show ()
{
cout<<a<<endl;
}
};
int main()
{
CExample A(100);
CExample B = A; // CExample B(A); 也是一样的
B.Show ();
return 0;
}
我想把里面的拷贝构造函数改成:
//拷贝构造函数
CExample(const CExample *C)
{
a = C->a;
}
行吗?刚才试了一下编译可以通过,而且可以得到正确结果。
本人菜鸟,弱弱问一下难倒非要用引用吗?用指针和引用有什么区别吗?我觉得引用应该就是一种特殊的指针吧?
c++
拷贝构造函数
指针
引用
------解决方案--------------------
可以的 你看一下引用和指针的区别就会明白了
------解决方案--------------------
CExample(const CExample *C)不是拷贝构造函数,于是编译器自动为你生成一个,参数类型为CExample const &。
编译时寻找到自动生成的拷贝构造函数,参数类型符合,所以编译通过。
------解决方案--------------------
拷贝构造函数的第一个参数必须是本类的引用,可以是const或是非const,其余参数必须都要有缺省值。如果没有符合要求的构造函数,编译器会自动生成一个。编译器自动生成的拷贝构造函数可见性为public,参数为const引用,实现为调用所有基类的拷贝构造函数和所有数据成员的拷贝构造函数。
拷贝构造函数不能是模板形式,如果你声明为模板,编译器会自动生成一个拷贝构造函数,然后调用时不会去实例化的模板。
使用指针类型在MyClass a; MyClass(b);参数类型不匹配,不是拷贝构造。
------解决方案--------------------
那你使用的时候,岂不是这样?
CExample A;
CExample B=&A;