拷贝构造函数遇到指针的问题
来源:互联网 发布:茅台迎宾酒淘宝店 编辑:程序博客网 时间:2024/05/21 17:12
想必大家都知道在以下三种情况会调用拷贝构造函数:
q将某个对象初始化为类的另一个对象时
q将对象当作参数传递给函数时
q函数返回对象时
但是在类中我们申明一个指针属性的时候,我是在构造函数里用new分配空间,在析构函数释放空间。在main()里调用
类名 对象名(另一个对象名);//符合第一条
String s2(s1);s2.display(); //执行有问题 ,
运行的时候发觉指针异常,即段错误。
这是因为在调用拷贝构造函数的时候
class String
{
public:
int len;
char *str;
public:
String(int l=0,char *s="") //构造函数
{
len=l;
int length = strlen(s);
str = new char[length+1];
strcpy(str,s);
cout<<"11111111111111"<<endl;
String(String const &s2) // 复制构造函数,参数一定要用引用 为避免参数被意外修改,可在参数前加const
//复制构造函数何时使用:1 将某个对象初始化为类的另一个对象时
{
cout<<"复制构造"<<endl;
this->len=s2.len;
// this->str=s2.str; //默认地址值相同
int length = strlen(s2.str);//改造成地址值不同,但内容相同
str = new char[length+1];
strcpy(str,s2.str);
}
~String(){
cout<<"~"<<str<<endl;
delete[] str;
str=NULL;
} //析构函数
赋值函数仅复制指针而非字符串,除S2后,内存被释放,但对象S1的str仍指向它。
请看完整的代码:
#include "iostream.h"
#include "string.h"
#include "string.h"
class String
{
public:
int len;
char *str;
public:
String(int l=0,char *s="") //构造函数
{
len=l;
int length = strlen(s);
str = new char[length+1];
strcpy(str,s);
cout<<"11111111111111"<<endl;
}
String(String const &s2) // 复制构造函数,参数一定要用引用 为避免参数被意外修改,可在参数前加const
//复制构造函数何时使用:1 将某个对象初始化为类的另一个对象时
{
cout<<"复制构造"<<endl;
this->len=s2.len;
// this->str=s2.str; //默认地址值相同
int length = strlen(s2.str);//改造成地址值不同,但内容相同
str = new char[length+1];
strcpy(str,s2.str);
}
~String(){
cout<<"~"<<str<<endl;
delete[] str;
str=NULL;
} //析构函数
String operator = (const String & s2) //operator=是函数名 // 得分点:输入参数为const型
{
//方法2 可以
cout<<"==="<<endl;// s5=s5;
if(this==&s2)
return *this; //2
delete [] str; //2
this->len=s2.len;
int length = strlen(s2.str);
str = new char[length+1];
if(NULL==str) //2
return -1;
strcpy(str,s2.str);
return *this; //得分点:返回本对象的引用
}
void display()
{
cout<<str<<len<<endl;
}
String fun()
{
return *this;
{
//方法2 可以
cout<<"==="<<endl;// s5=s5;
if(this==&s2)
return *this; //2
delete [] str; //2
this->len=s2.len;
int length = strlen(s2.str);
str = new char[length+1];
if(NULL==str) //2
return -1;
strcpy(str,s2.str);
return *this; //得分点:返回本对象的引用
}
void display()
{
cout<<str<<len<<endl;
}
String fun()
{
return *this;
}
void fun2(String S) //String S=s1 ==String S(s1)
{
}
String fun3(String S)
{
return *this;
}
};
void main()
{
String s1(20,"welcom");
//s1.display();
//String s2(s1); //复制构造函数何时使用:1 将某个对象初始化为类的另一个对象时
//s2.display();
void fun2(String S) //String S=s1 ==String S(s1)
{
}
String fun3(String S)
{
return *this;
}
};
void main()
{
String s1(20,"welcom");
//s1.display();
//String s2(s1); //复制构造函数何时使用:1 将某个对象初始化为类的另一个对象时
//s2.display();
//String s5= s3.operator=(s1); //调用operator=函数和复制构造函数
// String s5=s1;//只调用复制构造函数
String s5; //如果分成2行写,则调用operator=函数和复制构造函数
s5=s1;//s1.str s5.str
//String s3;
// s1.fun3(s3); //复制构造函数何时使用:3 函数返回对象时
//String s3=s1.fun();
//s1.fun2(s1); //复制构造函数何时使用:2 将对象当作参数传递给函数时
// s3.fun3(s1); //调用2次构造函数
}
// String s5=s1;//只调用复制构造函数
String s5; //如果分成2行写,则调用operator=函数和复制构造函数
s5=s1;//s1.str s5.str
//String s3;
// s1.fun3(s3); //复制构造函数何时使用:3 函数返回对象时
//String s3=s1.fun();
//s1.fun2(s1); //复制构造函数何时使用:2 将对象当作参数传递给函数时
// s3.fun3(s1); //调用2次构造函数
}
0
上一篇:C语言常见的几个排序
下一篇:UNIX下c语言的图形编程
相关热门文章
- 网店代办货源网推举,各行各业...
- 开网店的友人留神了 淘宝又现...
- 开网店若何处置“问题买卖”_...
- 开网店技能 淘宝店肆客服子帐...
- 都是免费推广网店,新手上路必...
- test123
- 编写安全代码——小心有符号数...
- 使用openssl api进行加密解密...
- 一段自己打印自己的c程序...
- sql relay的c++接口
- ChinaUnix & ITPUB社区12周年...
- ssh连接出现以下提示,求解...
- 如何扩展MYSQL
- 准备做一个大型门户,用户什么...
- gbk or utf8
给主人留下些什么吧!~~
评论热议
- 拷贝构造函数遇到指针的问题
- 拷贝构造函数关于指针的拷贝问题
- C++ 拷贝构造函数中的指针问题
- 拷贝构造函数的问题
- 关于拷贝构造函数的一个问题
- 关于构造函数与拷贝构造函数的问题
- 关于拷贝构造函数、字符串拷贝的问题
- 带有指针成员变量类的拷贝构造函数实现
- 构造函数的拷贝
- this指针、构造函数、拷贝构造函数、析构函数的总结
- 拷贝构造函数问题所在
- 深拷贝、浅拷贝构造函数问题
- 默认拷贝构造函数的问题和自定义拷贝构造函数
- 含有指针成员的类的构造函数、拷贝构造函数、赋值运算符
- c++拷贝方面的问题(深、浅拷贝,为何拷贝构造函数传const引用)
- 构造函数、拷贝构造函数的运用
- 类的构造函数、拷贝构造函数
- String的构造函数拷贝构造函数
- 教你如何将ARM的代码直接拷到驱动程序中
- 按键中断的驱动代码
- 嵌入式C语言面试题
- const注意的几个事项
- C语言常见的几个排序
- 拷贝构造函数遇到指针的问题
- Linux初学笔记
- UNIX下c语言的图形编程
- Qt资料下载网站
- Qt实现大图片快速缩小的算法
- QtEmbedded软键盘输入法实战
- Qt/e输入法程序设计指南
- 独显+集显设置三个显示器输出,其中两个副屏输出相同
- qt移植到s3c2440开发板上
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
三国之席卷天下
魏蜀吴三国简介
三国谁统一的
三国武将排名易中天
三国中武将排名
三国类单机手游
三国是什么时候
三国之后谁统一天下
三国魂公益服
霸三国online
法意瑞三国10日游
三国系列的手游
三国名将排行
三国风云再起
三国杀神将
sanguo
三国杀图片
三国有哪三个国
三囯
三国杀吧
三国杀online
三国杀下载
三国杀网页版在线玩
束甲网游之止戈三国
三个土念什么
三个土
三土
三土念什么
三个土读什么
水嫩妒土被连射三次
三个土什么字
土
三个土念什么字
三土念什么字
三土羊
三点水日土
三个土怎么读
坟土荒草神话版三
率土之滨主五要三什么意思
三个田一个土
三个土字念什么