大家帮忙看看释疑下
//头文件
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对象