
C++高手请进 语法问题 函数返回值为对象引用
#include"stdafx.h"#include"stdio.h"#include"shlwapi.h"classTEST{public:charstr[10];TE...
#include "stdafx.h"
#include "stdio.h"
#include "shlwapi.h"
class TEST
{
public:
char str[10];
TEST()
{
strcpy(str,"TEST");
}
void lnit(char * temp)
{
strcpy(str,temp);
}
void display()
{
printf(str);
}
};
TEST & testob()
{
static TEST test;
return test;
}
int _tmain(int argc, _TCHAR* argv[])
{
testob().lnit("hello");
testob().display();
return 0;
}
看看这段程序
输出内容为 hello 不是 TEST
为什么啊!? 我的理解是
第二次的调用testob()函数 会创建一个新的TEST对象啊
该对象也会 重新 调用构造函数 所有输出内容应该是TEST
为什么是hello 按理说 应该第一次的初始化hello不影响第二次的调用才是
我发现好像 后面不管调用多少次这个testob() 函数 返回的对象都是第一次调用时创建的static 对象 不会再次创建 展开
#include "stdio.h"
#include "shlwapi.h"
class TEST
{
public:
char str[10];
TEST()
{
strcpy(str,"TEST");
}
void lnit(char * temp)
{
strcpy(str,temp);
}
void display()
{
printf(str);
}
};
TEST & testob()
{
static TEST test;
return test;
}
int _tmain(int argc, _TCHAR* argv[])
{
testob().lnit("hello");
testob().display();
return 0;
}
看看这段程序
输出内容为 hello 不是 TEST
为什么啊!? 我的理解是
第二次的调用testob()函数 会创建一个新的TEST对象啊
该对象也会 重新 调用构造函数 所有输出内容应该是TEST
为什么是hello 按理说 应该第一次的初始化hello不影响第二次的调用才是
我发现好像 后面不管调用多少次这个testob() 函数 返回的对象都是第一次调用时创建的static 对象 不会再次创建 展开
4个回答
展开全部
我是这么理解的。
就是在那个TESTOB()函数中你是定义的一个静态变量的,就是STATIC TEST TEST,所谓静态变量就是在后面的引用中都是这么一个确定的值的。。所以你后面调用的时候才会出现你这样的情况的。这个程序确实应该是输出HELLO。
因为你相当于是给TEst这个类创建了一个引用指针的,就是testob那么你在使用的时候可以直接使用testob就可以了。你在程序中是这个样子实现的,。然后进行初始化,就是你的init函数,这个函数就把hello的指针赋值给了str ,然后你后面又紧跟着去调用你的显示函数,这个样子呢,就会显示出你的hello 的。所以不应该是test ,除非你是调用的构造函数的。
我也是初学不知道对不对。。
就是在那个TESTOB()函数中你是定义的一个静态变量的,就是STATIC TEST TEST,所谓静态变量就是在后面的引用中都是这么一个确定的值的。。所以你后面调用的时候才会出现你这样的情况的。这个程序确实应该是输出HELLO。
因为你相当于是给TEst这个类创建了一个引用指针的,就是testob那么你在使用的时候可以直接使用testob就可以了。你在程序中是这个样子实现的,。然后进行初始化,就是你的init函数,这个函数就把hello的指针赋值给了str ,然后你后面又紧跟着去调用你的显示函数,这个样子呢,就会显示出你的hello 的。所以不应该是test ,除非你是调用的构造函数的。
我也是初学不知道对不对。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我是这么理解的。
就是在那个TESTOB()函数中你是定义的一个静态变量的,就是STATIC
TEST
TEST,所谓静态变量就是在后面的引用中都是这么一个确定的值的。。所以你后面调用的时候才会出现你这样的情况的。这个程序确实应该是输出HELLO。
因为你相当于是给TEst这个类创建了一个引用指针的,就是testob那么你在使用的时候可以直接使用testob就可以了
就是在那个TESTOB()函数中你是定义的一个静态变量的,就是STATIC
TEST
TEST,所谓静态变量就是在后面的引用中都是这么一个确定的值的。。所以你后面调用的时候才会出现你这样的情况的。这个程序确实应该是输出HELLO。
因为你相当于是给TEst这个类创建了一个引用指针的,就是testob那么你在使用的时候可以直接使用testob就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
static TEST test; 设为了静态,只会在第一次调用时进行初始化,也就是在第一次调用才会去构造对象。这个对象的的内存空间的生命周期是和整个程序相同的,也就是在调用完TEST & testob()对象的内存空间不释放,下次调用TEST & testob()时,这个对象还存在,就不会再去重新构建。所以你第二调用testob().display(),它输出的是hello,函数没有重新去构造对象,就不会调用构造函数。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
static 对像只能创建一次!你创建第一次为"TEST",再来个init();
这个值成为了"HELLO",以后不管你怎么创建,它都不会再初始化了
只能给它赋值.
这个值成为了"HELLO",以后不管你怎么创建,它都不会再初始化了
只能给它赋值.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询