day02作业:
1、常引用的作用?
保护传递给函数的数据不在函数中被改变
2、拷贝构造函数为什么可以访问其私有成员?
3、编一个程序,从 string 对象中去掉标点符号。要求输入到程序的字符串必须含有标点符号,输出结果则是去掉标点符号后的 string 对象。�注:调用ispunct(c), 如果 c 是标点符号,返回true。
4、编写一个学生类,成员变量有 生日(生日类需要另外定义)学号 姓名 数学 英语 语文三科的成绩
计算总成绩和输出学生信息
要求自定义无参数和有参数的构造函数和析构函数
string in;
cin >> in;//hello,nihao
string out;
for(int i=0;i<in.length();i++){
if(!ispunct(in[i])){
out+=in[i];
}
}
cout<<out<<endl;
5、匿名(临时)对象问题(结合如下拷贝函数理解)
拷贝构造函数
概念:
调用时机1:test t2=t1;//test t2(t1); 不同于赋值t2=t1;
调用时机2:实参初始化形参
调用时机3:Test b;b=func();//调用拷贝
Test b=func();
Animal func1(){
Animal animal;
return animal;//返回一个临时的对象,调用拷贝构造函数
}
void display(){
Animal ani;
ani=func1();//将临时对象赋值给ani,并析构临时对象。
}
运行结果:
Animal func1(){
Animal animal;
return animal;//返回一个临时的对象,调用拷贝构造函数
}
void display(){
Animal ani=func1();//将临时对象传递给了ani,其实就是转正了,不析构临时对象
}
运行结果:
构造函数的调用规则
如果显示定义了构造函数,系统就不会提供默认的了
需要注意,显示定义了有参数的构造函数,最好同时定义无参数的构造函数,否则不能调用无参数构造函数声明对象。
深拷贝和浅拷贝
请参照课件。
产生原因?解决方案?
练习:用c++实现单链表逆置。