免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1760 | 回复: 5
打印 上一主题 下一主题

请帮我看一下在C++中这段代码有什么问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-19 15:39 |只看该作者 |倒序浏览
struct Test
{
    Test( int ) {}
    Test() {}
    void fun() {}
};
void main( void )
{
    Test a(1);
    a.fun();
    Test b();
    b.fun();
}

论坛徽章:
0
2 [报告]
发表于 2008-05-19 15:42 |只看该作者
Test b() -->  Test b;
Test b(),这样写是申明一个返回值为Test对象的函数。

论坛徽章:
0
3 [报告]
发表于 2008-05-19 15:52 |只看该作者
那  
test a(1); 与
test b()  有什么区别? test a(1)不也是一个返回 test 类型的函数吗,为什么a.fun()就可以?

论坛徽章:
0
4 [报告]
发表于 2008-05-19 16:13 |只看该作者
Test( int ) {},Test() {}这两个构造函数是有区别的,第二个叫默认构造函数,用它来构造对象不能带参数,如果带参数就跟函数声明语法矛盾。默认构造函数还包括带参数但是参数有默认值的构造函数,比如定义这样一个构造函数:
Test(int i = 0){},它也是默认构造函数,一个类的默认构造函数只能一个。

论坛徽章:
0
5 [报告]
发表于 2008-05-19 18:03 |只看该作者
参照C++ primer

C++语言新手常犯的错误是按如下方式声明一个用缺省构造函数初始化的对象
// 喔! 并没有像期望的那样工作
Account newAccount();
它能通过编译但是当我们试图使用它时
// 编译错误
if ( !newAccount.name() ) ...
编译器会抱怨我们不能把成员访问符应用到函数上定义
// 定义了一个函数 newAccount,
// 不是一个 Account 类对象
Account newAccount();
被编译器解释为定义了一个没有参数返回一个Account 类型对象的函数——完全不是我
们的意图用缺省构造函数初始化类对象的正确声明是去掉尾部的小括号
// ok: 定义了一个类对象
Account newAccount

论坛徽章:
0
6 [报告]
发表于 2008-05-19 18:38 |只看该作者
agree
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP