| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 789 人关注过本帖
标题:不起眼的初化问题的请教
只看楼主 加入收藏
heliujin
Rank: 2
等 级:论坛游民
帖 子:249
专家分:14
注 册:2006-3-14
结帖率:100%
收藏
 问题点数:0 回复次数:12 
不起眼的初化问题的请教

程序如下:
#include<iostream.h>

#include<string>

class a
{
public:
a(){}

a(char *p)/*:s(p)*/
{
s=new char[strlen(p)+1];
strcpy(s,p);
}

a(const a &other)
{
s=new char[strlen(other.s)+1];

strcpy(s,other.s);
}

~a()
{
delete s;
}

void disp()
{
cout<<s<<endl;
}

private:
char *s;
};

int main()
{
a m("hello world");
a n(m);
m.disp();
n.disp();
return 0;
}
在 构造函数 a(char *p)/*:s(p)*/
{
s=new char[strlen(p)+1];
strcpy(s,p);
}

中 如果我用初始化列表 既
a(char *p):s(p){}
也能运行出来 但是有错误的提示 在运行中产生的
不信您可以试一试
为什么会这样啊
这两种方式 应该怎么区别和使用啊
谢谢大家的指教了



搜索更多相关主题的帖子: 不起眼 
2006-07-14 20:12
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
:s(p)是初始化的意思
这里有没有空间呢
你在构造里new的

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-07-14 20:23
heliujin
Rank: 2
等 级:论坛游民
帖 子:249
专家分:14
注 册:2006-3-14
收藏
得分:0 
没太明白您的意思
使用初始化列表的时候构造函数体内是空的
反正这个地方有点糊涂
大家指点指点小弟吧 谢谢大家了
2006-07-14 20:40
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
a(char *p):s(p)
{
s=new char[strlen(p)+1];
strcpy(s,p);
}
这里循序是先初始化s于p(s根本没空间,是0)
再给s分配空间
你说这样好么

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-07-14 21:01
heliujin
Rank: 2
等 级:论坛游民
帖 子:249
专家分:14
注 册:2006-3-14
收藏
得分:0 
我的意思是先把构造函数改成
a(char *p):s(p){}
也一样能运行 但是会出错的


2006-07-14 21:53
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
那不一样么
s没有空间

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-07-14 22:04
heliujin
Rank: 2
等 级:论坛游民
帖 子:249
专家分:14
注 册:2006-3-14
收藏
得分:0 
你的意思是如果S是指针 那么就必须不能在初始化列表中进行初始化吗?
如果能 帮我举个例子吧 我学的不好 请多指教
谢谢了
2006-07-14 23:02
ysol
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2006-6-11
收藏
得分:0 
个人认为是,编译的时候s 和 p 都是指针类型,所有可以通过编译,比如char* p="abcd" 被赋值后 s(p)被认为是c_string拷贝,而c_string没有默认复制功能,所以出错,只能用strcpy()复制。

[此贴子已经被作者于2006-7-14 23:08:17编辑过]


2006-07-14 23:03
heliujin
Rank: 2
等 级:论坛游民
帖 子:249
专家分:14
注 册:2006-3-14
收藏
得分:0 

知道了
谢谢了 那初始化列表一般竟什么时候用啊?
2006-07-14 23:05
ysol
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2006-6-11
收藏
得分:0 
a(char *p):s(new char[strlen(p)+1])
    {
    }
可以这样试试。
2006-07-14 23:17
快速回复:不起眼的初化问题的请教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016783 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved