关于复制构造函数的两个问题
#include<iostream>
#include<string>
using namespace std;
struct NoName
{NoName(string a=""):p(new string(a)),i(0),d(0.0){}
NoName(const NoName &n);
NoName &operator=(const NoName &n);
~NoName(){delete p;}
private:
string *p;
int i;
double d;
};
NoName::NoName(const NoName &n):i(n.i),d(n.d),p(new string(*n.p)){}
NoName &NoName::operator=(const NoName &n)
{i=n.i;
d=n.d;
p=new string(*n.p);
return *this;}
int add(int x,int y)
int main(void)
{NoName a("1234");
NoName b(a);
const NoName c(a);
const NoName d=a;//这个地方d是const的为什么能传到重载=的const *NoName this里面去
getchar();
return 0;}
关于复制构造函数的两个问题
void print(int a)
{a=3;}
int main()
{
print(int b)//这里和刚刚类似(边定义边使用),为什么这个报错,虽然这个会被自动回收
}
NoName a("1234");//调用NoName(string a="")
NoName b(a);//下面三个都是调用了NoName(const NoName &n)
const NoName c(a);
const NoName d=a;//这个并没有使用重载=
#include<iostream>
#include<string>
using namespace std;
struct NoName
{
NoName(string a=""):p(new string(a)),i(0),d(0.0)
{
cout << "NoName(string a="")" <<endl;
}
NoName(const NoName &n);
NoName &operator=(const NoName &n);
~NoName(){delete p;}
private:
string *p;
int i;
double d;
};
NoName::NoName(const NoName &n):i(n.i),d(n.d),p(new string(*n.p))
{
cout << "NoName::NoName(const NoName &n)" << endl;
}
NoName &NoName::operator=(const NoName &n)
{
cout << "NoName::operator=" << endl;
i=n.i;
d=n.d;
p=new string(*n.p);
return *this;
}
int main(void)
{
NoName a("1234");
NoName b(a);
const NoName c(a);
const NoName d=a;
system("pause");
return 0;
}
const NoName d=a;