BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #71816同步于 2013/6/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

三个C++问题,求指教

Mulany
2013/6/16镜像同步24 回复
1.Why is the code unsafe? How would you make the function safe ? LPSTR Uppercases(LPSTR Data) { CHAR buffer(256); _strycpy(buffer,Data); return _strupr(buffer); } 2.Check below class declaration, please implement the implementations. class string{ public: String(const char *str=NULL); String(const String &another); ~String(); String operator=(const String &third); private: char *m,data; } 3.What does “operator Test::A()” mean? TestFn1(obj) can’t get through the compiling,but TestFn2(obj) and TestFn3(obj) can,why? namespace Test{ //namespace Test是干啥的??? class A{ public: friend void TestFn1(const A &a){}; }; void TestFn2(const A &a){}; } class B{ public: operator Test::A(){return Test::A();} }; using namespace Test;//这是啥意思??? void TestFn3(const A &a){} void main(){ B obj; TestFn1(obj); TestFn2(obj); TestFn3(obj); }
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
liam机器人#1 · 2013/6/16
1. return _strupr(buffer); 这个buffer是静态分配的,在return后离开作用域,数据可能被销毁。 2. 重点就是在OPERATOR等号里完成个分配内存再拷贝 3.namespace C++命名空间。。。楼主您这 operator Test::A(){return Test::A();} 是啥?? 这些挺基本的,可以考虑先研究下C++教材
Mulany机器人#2 · 2013/6/16
我就把原题给敲上了 我也不懂 关于命名空间具体是怎么用呀?namespace用来定义命名空间? 【 在 liam 的大作中提到: 】 : 1. return _strupr(buffer); 这个buffer是静态分配的,在return后离开作用域,数据可能被销毁。 : 2. 重点就是在OPERATOR等号里完成个分配内存再拷贝 : 3.namespace C++命名空间。。。楼主您这 operator Test::A(){return Test::A();} 是啥?? : ...................
tootwo机器人#3 · 2013/6/16
hehe
liam机器人#4 · 2013/6/16
【 在 Mulany 的大作中提到: 】 : 我就把原题给敲上了 我也不懂 : 关于命名空间具体是怎么用呀?namespace用来定义命名空间? http://www.cnblogs.com/autocrat/archive/2010/05/05/1727630.html,这百度上的,顺带的,可以百度下“C++静态函数”加深理解
a206206机器人#5 · 2013/6/16
明明空间。实际上就是防止名字冲突的。 比如你们很多人在写一个lib,如果不用明明空间,很有可能会各种函数名之类的冲突。加上namespace就不会冲突了。除非空间的名字也一样
RaulSpain007机器人#6 · 2013/6/16
话说strcpy这种函数也不安全。
Mulany机器人#7 · 2013/6/16
ok 谢谢 【 在 liam 的大作中提到: 】 : : http://www.cnblogs.com/autocrat/archive/2010/05/05/1727630.html,这百度上的,顺带的,可以百度下“C++静态函数”加深理解
Mulany机器人#8 · 2013/6/16
使用了某个命名空间的话,在接下来的程序里出现的名字,若空间里有,就是指该空间内的名字是吗?是这样理解么 【 在 a206206 的大作中提到: 】 : 明明空间。实际上就是防止名字冲突的。 : 比如你们很多人在写一个lib,如果不用明明空间,很有可能会各种函数名之类的冲突。加上namespace就不会冲突了。除非空间的名字也一样
tangzehang机器人#9 · 2013/6/16
先解释下命名空间吧,打个比方吧,如果一个学校(相当于头文件)只有两个班(两个命名空间),每个班里都有一个叫小明的,然后有一天校长开全效大会(main函数),如果校长直接说小明,那么就会造成混乱,因为不知道是叫哪个小明..如果校长在叫小明之前说了一句,"现在我们说说1班的问题"(using namespace),然后再点名小明,这时我们就知道是在叫1班的小明了... 1:buffer只有256,而DATA不知道大小,可能会造成溢出.(按照信安理论,可以用这种方法进行代码注入.挺凶残的,可以在申明buffer前判断data大小再申明buffer) 2:感觉没什么吧,一个是构造函数,一个是复制函数,一个是析构函数,还有一个符号重载,翻翻书应该没问题了. 3:就是命名空间的问题了,,至于第一个问题,我也不是很清楚..然后由于TestFn1是在A类内定义的,所以不能被直接调用,用申明一个A类实例.之后TestFn2说了,校长已经申明了要说1班的问题了..然后TestFn3不用说了吧,都在main函数文件里面了...