#include<iostream>
using namespace std;
#define f S::init()
class S
{
public:
static S *init(){
S *p = new S;
return p;
}
void print1(){
cout<<"1fasdf"<<endl;
}
void print2(){
cout<<"2fasdf"<<endl;
}
void print3(){
cout<<"3fasdf"<<endl;
}
};
int main(){
f->print1();
f->print2();
f->print3();
return 0;
}
今天笔试时这道题目要求改错,但是在windows下及linux下均运行无误,求解答。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
这题应该算开放式问题
毛病包括这些:
内存泄露了
init 命名严重有误。包含了新建过程的函数,则应使用 Create 、GetNew 之类词元
一个没有数据成员的类,其所有成员函数最好为static,否则调用前还得new一个对象,蹩脚。或者不用cpp,用c能获得更多的编译兼容性支持和程序员支持
#define f ... 里头,f 一个字母的标示符就位于全局,而且人不像人,鬼不像鬼(实际是函数,用起来时象数据)属于找揍
假如多平台编译、被多工程引用,using namespace std 可以考虑优化掉,改为后面 std::cout