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 对象 不会再次创建
展开
 我来答
surplushaode
2010-05-05 · TA获得超过2055个赞
知道大有可为答主
回答量:2510
采纳率:0%
帮助的人:2530万
展开全部
我是这么理解的。
就是在那个TESTOB()函数中你是定义的一个静态变量的,就是STATIC TEST TEST,所谓静态变量就是在后面的引用中都是这么一个确定的值的。。所以你后面调用的时候才会出现你这样的情况的。这个程序确实应该是输出HELLO。
因为你相当于是给TEst这个类创建了一个引用指针的,就是testob那么你在使用的时候可以直接使用testob就可以了。你在程序中是这个样子实现的,。然后进行初始化,就是你的init函数,这个函数就把hello的指针赋值给了str ,然后你后面又紧跟着去调用你的显示函数,这个样子呢,就会显示出你的hello 的。所以不应该是test ,除非你是调用的构造函数的。
我也是初学不知道对不对。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e19054989ed
2019-11-19 · TA获得超过1197个赞
知道小有建树答主
回答量:3803
采纳率:100%
帮助的人:26.2万
展开全部
我是这么理解的。
就是在那个TESTOB()函数中你是定义的一个静态变量的,就是STATIC
TEST
TEST,所谓静态变量就是在后面的引用中都是这么一个确定的值的。。所以你后面调用的时候才会出现你这样的情况的。这个程序确实应该是输出HELLO。
因为你相当于是给TEst这个类创建了一个引用指针的,就是testob那么你在使用的时候可以直接使用testob就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ly6765395
2010-05-09 · TA获得超过141个赞
知道答主
回答量:105
采纳率:0%
帮助的人:0
展开全部
static TEST test; 设为了静态,只会在第一次调用时进行初始化,也就是在第一次调用才会去构造对象。这个对象的的内存空间的生命周期是和整个程序相同的,也就是在调用完TEST & testob()对象的内存空间不释放,下次调用TEST & testob()时,这个对象还存在,就不会再去重新构建。所以你第二调用testob().display(),它输出的是hello,函数没有重新去构造对象,就不会调用构造函数。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6d837d0
2010-05-05 · TA获得超过979个赞
知道小有建树答主
回答量:644
采纳率:0%
帮助的人:522万
展开全部
static 对像只能创建一次!你创建第一次为"TEST",再来个init();

这个值成为了"HELLO",以后不管你怎么创建,它都不会再初始化了

只能给它赋值.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式