首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

大家帮忙看看释疑下,该如何处理

2012-03-11 
大家帮忙看看释疑下//头文件if!define(cpp1_H)#definecpp1_H#include string#include iostreamusingna

大家帮忙看看释疑下
//头文件
if   !define(cpp1_H)
#define   cpp1_H

#include <string>
#include <iostream>
using   namespace   std;
class   Welcome
{
public:
Welcome(char   s[]= "welcome! ");//使用默认参数
Welcome(Welcome   &);
void   Display();
void   Set(char   []);
char   *Get();//因为是字符串数组返回指针
void   talk();
~Welcome();
private:
char   str[128];
};
#endif
Welcome::Welcome(char   s[])
{
strcpy(str,s);
}
Welcome::Welcome(Welcome   &s)
{
strcpy(str,s.str);
}
void   Welcome::talk()
{
for(;   ;)
{
cout < < "输入: ";
gets(str);
if(strcmp(str, "OK ")==0)
break;
cout < < "输出: " < <str < <endl;
}
Welcome   they( "all   right! ");
they.Display();
}
inline   void   Welcome   ::Display()
{
cout < <Get() < <endl;
}
void   Welcome   ::   Set(char   s[])
{
strcpy(str,s);
}
char   *Welcome   ::   Get()
{
return   str;
}
Welcome   ::   ~Welcome()
{
cout < < "Goodbye! " < <endl;
}
//主程序
#include "cpp1.h "
void   main()
{
Welcome   we;
Welcome   you(we);

you.Display();
you.Set( "Thank   you. ");//给str赋值
cout < <you.Get() < <endl;//输出thank   you

you.talk();
you.Display();
}
这个程序的输出结果为什么是
goodbye
OK
goodbye
goodbye
希望大家告诉我先析构那个对像,为什么有OK输出啊,我一直想不通

[解决办法]
gets(str);//这个时候你控制台输入的OK就copy到str之内了,否则程序继续执行,不会跳出循环阿

第一个goodbye 析构了Welcome they( "all right! ")这个对象,这个析构发生在you.talk();返回之前;这个时候会打印第一个goodbye
然后接着执行you.Display();这个时候会打印OK
之后是main方法退出之前析构了you 还有 we 所以,接连输出了两个goodbye
[解决办法]
goodbye <-析构they对象
OK <-输出you对象中的str,已经被赋值 "OK "
goodbye <-析构you对象
goodbye <-析构we对象

热点排行