读书人

一道面试题,烦请看看,该如何解决

发布时间: 2012-02-14 19:19:19 作者: rapoo

一道面试题,烦请看看
以下代码有什么问题
struct Test
{
Test( int ) {}
Test() {}
void fun() {}
};
void main( void )
{
Test a(1);
a.fun();
Test b();
b.fun();
}
/////////
Test b()和Test b有什么区别??


[解决办法]
Test b()编译器会认为函数的声明,而Test b表示定义Test一个结构变量
[解决办法]
函数定义不需要 "; "
[解决办法]
利用无参构造函数做对象声明不加括号 Test b();==> Test b;
[解决办法]
利用无参构造函数做对象声明不加括号 Test b();==> Test b;
----------
Test b();
这个表示一个函数b,返回Test类型
[解决办法]
believefym(feng)
--------------
下面一行是b.fun();
b明显是一个对象
[解决办法]
/////////
Test b()和Test b有什么区别??

Test b();
定义一个函数.函数没有参数,返回Test

Test b;
定义一个变量 b.并调用 Test的默认构造函数来初始化对象

[解决办法]
我从来不会这么写,很明显,编译不过。会说,未定义变量b,至于那一句是什么意思,不明,估计是会视为一个函数调用,并且找不到原函数而被误认为是什么别的东西,就像定义类时如果}后面的分号丢了会出一大堆莫名其妙的错误一样。
[解决办法]
#include <iostream>

using namespace std;

struct Test
{
Test( int ) { cout < < "1 " < < endl; }
Test() { cout < < "2 " < < endl; }
void fun() { cout < < "fun " < < endl; }
};

int main( void )
{
Test a(1);
a.fun();
Test b();

cin.get();
}

结果:
1
fun

//////////////////////////
证明Test b();
是函数申明语句
[解决办法]
晕,这个代码编得过?不是吧我这编不过的,VS2003
[解决办法]
不知是什么意思
能解释一下不
为什么不是
1
fun
2
因为Test()是构造函数啊
[解决办法]
lz是要问
以下代码有什么问题
还是
Test b()和Test b有什么区别??
[解决办法]
Test()是构造函数
[解决办法]
Test b();用构造函数Test b(){}直接构造一个名位b的对象
Test b;先声明一个名位b的对象,再用Test b(){}构造函数对b初始化
[解决办法]
这个我面试的时候也考了,呵呵,楼主是不是在中科院面的试?
当时我头晕脑涨也不知道怎么改的
大致是这样的吧:
struct Test
{
Test( int ) {}
Test() {}
void fun() {}
};
void main( void )
{
Test a(1);
a(0).fun();
Test b;
b.fun();
}
[解决办法]
Test b()构造函数
Test b 一个对象
[解决办法]
中科院考这个?!厉害
[解决办法]
Test b();//声明一个函数,return type is Test
Test b;//定义一个Test的对象b,此时会自动调用缺省构造函数Test(),
//如果定义写成Test b(any int);,此时也是定义对象b,此时调用重载的构造函数


//Test(int)初始化
[解决办法]
不好意思,我还是有些不懂
诸位看看我的理解对不对
在nevergone()示例程序中
struct Test
{
Test( int ) { cout < < "1 " < < endl; }
Test() { cout < < "2 " < < endl; }
void fun() { cout < < "fun " < < endl; }
};

int main( void )
{
Test a(1); //使用Test( int )c,同时输出 '1 '
a.fun(); //调用fun(),输出 "fun "
Test b(); //使用Test()函数初始化对象b, 同时输出 '2 ',但执行结果没有这么一句,为什么?

cin.get();
}
[解决办法]
void main(){
test a(1);
test b();
cout < < "fun " < <endl;

a.fun();}
/////////////////
输出结果: 1
fun
////////////////
void main(){
test a(1);
test b;
b.fun();

a.fun();}
///////////////
输出结果: 1,2,fun ,fun
//////////////

结论:通过两段代码比较:test b是构造无参数对象,可以使用fun()方法;
test b()是函数申明
[解决办法]
struct Test
{
Test( int ) {}
Test() {}
void fun() {}
};
void main( void )
{
Test a(1);
a.fun();
Test b; //这里括号应该去掉。
b.fun();
}

读书人网 >C++

热点推荐