几个函数问题请进详解
1、TElemelemBuffTElem&Func(void){elemBuff=K;//K为一外部数据returnelemBuff;}Func()=xx与elemBuf...
1、TElem elemBuff
TElem& Func(void)
{
elemBuff=K;//K为一外部数据
return elemBuff;
}
Func() = xx与elemBuf = xx有什么不同?
如果是下面这种该怎么处理
TElem& Func(TElem &elem)
{
TElem *pNode=elem;
return *pNode;
}
2、能不能举一个非用指针不可的例子?
3、int k=0;
TElem& Func(void)
{
k++;
return room[k];
}//这里为什么强调要保存返回引用的值,否则下次Func会破坏上次的值,我感觉变化的只是k
3 中room是外部的一个空间 其他的内容就是这些了 他的意思是要把func的返回值保存 否则下次func会破坏上次的返回值(因为是引用 所以应该就是指原值)类似的也有一段代码
TElem& func(void)
{
TElem *p;
*p=room[k];
elemBuff=*p;
delete p;
return elemBuff;//在下次调用该函数前要将返回值复制(书中的原文)
}k是外部一个int型 room是外部一个存储空间 展开
TElem& Func(void)
{
elemBuff=K;//K为一外部数据
return elemBuff;
}
Func() = xx与elemBuf = xx有什么不同?
如果是下面这种该怎么处理
TElem& Func(TElem &elem)
{
TElem *pNode=elem;
return *pNode;
}
2、能不能举一个非用指针不可的例子?
3、int k=0;
TElem& Func(void)
{
k++;
return room[k];
}//这里为什么强调要保存返回引用的值,否则下次Func会破坏上次的值,我感觉变化的只是k
3 中room是外部的一个空间 其他的内容就是这些了 他的意思是要把func的返回值保存 否则下次func会破坏上次的返回值(因为是引用 所以应该就是指原值)类似的也有一段代码
TElem& func(void)
{
TElem *p;
*p=room[k];
elemBuff=*p;
delete p;
return elemBuff;//在下次调用该函数前要将返回值复制(书中的原文)
}k是外部一个int型 room是外部一个存储空间 展开
2个回答
展开全部
1、好像没多大区别,类似的写法对数据封装有用,不过这段代码总用全局变量,本身是破坏数据封装的。
2、如,命令行程序的命令行参数是char *argv[],本身就是字符指针,不可能只用string类解决。不过上面举的例子不是最重要的,一般就是在对时间或空间效率有特殊要求的低层操作中,或者是为了自己实现一种特殊的数据结构时,尤其是要自己对内存分配进行处理时,就必须用指针;不过一般的C++应用则还是最好避免指针(考虑更用地用STL),以保证安全高效。
3、如果不是返回引用,那么返回的是指针还是返回新的对象?还有不明白room是不是外部数组。如果返回的指针,自然,语法上不一样,不过作用与返回引用一致;如果返回的是新的对象(room[k]的复本),那么新对象不影响room[k]的内容。
根据你给补允的代码,其中说“在下次调用该函数前要将返回值复制”,应该指的是在外部room[k]的内容可能被改变,从而影响到后来对func返回值的使用。
不过你原来3中的Func函数仍不知道是什么意思。因为返回引用才更可能被外部修改,返回复本才不会,疑心是书上写反了。
另外,你补充给的代码是有错误的。代码中p是一个func中的局部auto型对象,一般是分配栈空间中,不能用delete运算符删除(它会在函数结束后自动删除)。delete只能与new成对地出现,因而这样的代码一定会出错。
为此,我专门写了一段测试代码:
#include <iostream>
#include <cstdlib>
using namespace std;
class T {
public:
T(int in = 0) : i(in) {/* null */} //构造函数
int i;
};
T buf;
T room[10];
int k = 0;
T& foo()
{
T* p;
*p = room[k];
buf = *p; //在这句调用默认构造函数
delete p; //错误!在调用foo()时会发生运行时错误。
return buf;
}
int main()
{
foo();
system("pause");
return 0;
}
2、如,命令行程序的命令行参数是char *argv[],本身就是字符指针,不可能只用string类解决。不过上面举的例子不是最重要的,一般就是在对时间或空间效率有特殊要求的低层操作中,或者是为了自己实现一种特殊的数据结构时,尤其是要自己对内存分配进行处理时,就必须用指针;不过一般的C++应用则还是最好避免指针(考虑更用地用STL),以保证安全高效。
3、如果不是返回引用,那么返回的是指针还是返回新的对象?还有不明白room是不是外部数组。如果返回的指针,自然,语法上不一样,不过作用与返回引用一致;如果返回的是新的对象(room[k]的复本),那么新对象不影响room[k]的内容。
根据你给补允的代码,其中说“在下次调用该函数前要将返回值复制”,应该指的是在外部room[k]的内容可能被改变,从而影响到后来对func返回值的使用。
不过你原来3中的Func函数仍不知道是什么意思。因为返回引用才更可能被外部修改,返回复本才不会,疑心是书上写反了。
另外,你补充给的代码是有错误的。代码中p是一个func中的局部auto型对象,一般是分配栈空间中,不能用delete运算符删除(它会在函数结束后自动删除)。delete只能与new成对地出现,因而这样的代码一定会出错。
为此,我专门写了一段测试代码:
#include <iostream>
#include <cstdlib>
using namespace std;
class T {
public:
T(int in = 0) : i(in) {/* null */} //构造函数
int i;
};
T buf;
T room[10];
int k = 0;
T& foo()
{
T* p;
*p = room[k];
buf = *p; //在这句调用默认构造函数
delete p; //错误!在调用foo()时会发生运行时错误。
return buf;
}
int main()
{
foo();
system("pause");
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询