Class obj;和Class obj();的不同?

hxDreamer 2007-01-09 11:47:01
我问了我们老师也不知道。。哎,希望能有人帮我。

#include <iostream.h>
class A
{
public: int i;
public: A() { i=10;cout<<"A created"<<endl; }
};
class B:public A
{ int i;
public:
B() { cout<<"B created"<<endl; }
B(int j) {
i=j;
cout<<"B created with value: "<<i<<endl;
}
};
void main()
{
A a(); // A a; 不同?
//B b(20);
cout<<a.i<<endl; // 这样编译不通过。。。
}
/*out:
A created
B created with value: 20
*/

我不明白,A a();和A a;为什么不同,不都是声明A的对象吗?并且应该都使用默认构造(这里有了A()).
...全文
312 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hxDreamer 2007-01-11
  • 打赏
  • 举报
回复
c++感觉太不严格了,或者说太灵活了,真难掌握。我们这NIIT的却拿这个入门,然后学Java,我还是班里最好的= =!!
cout<<typeif(a).name();好像不能用吧。
OOPhaisky 2007-01-11
  • 打赏
  • 举报
回复
A a();
这是声明一个函数a,返回类型是A,参数列表为void。
hxDreamer 2007-01-11
  • 打赏
  • 举报
回复
#include <iostream.h>
#include <typeinfo>

class A
{
public:
A() {cout<<"A created..."<<endl;}
};

void main()
{
A aa();
A bb;
cout<<"A aa(); "<<typeid(aa).name()<<endl;
cout<<"A bb; "<<typeid(bb).name()<<endl;
}

/*
A created...
A aa(); class A (__cdecl*)(void)
A bb; class A
*/
heskyII 2007-01-11
  • 打赏
  • 举报
回复
没差别.
"A a;"表示在创建对象时,调用默认的构造函数.
而在类A中你已经主动创建了构造函数,编译器就取消了默认构造函数.并且你创建的构造函数是不带参数的.所以用"A a(); "和"A a;"没差别.
如果构造函数是带参数的,并且你自己定义了带参数的构造函数,那么就必须使用"A a(args);",要是使用"A a;"创建对象,编译时就会报错.
taodm 2007-01-11
  • 打赏
  • 举报
回复
自己到C++Primer书后索引看typeid怎么用。
skfox 2007-01-11
  • 打赏
  • 举报
回复
呵呵
wswqwps 2007-01-11
  • 打赏
  • 举报
回复
原来是NIIT的,看来老师不知道的确可以原谅。
oo 2007-01-09
  • 打赏
  • 举报
回复
A a();
这是声明一个函数a,返回类型是A
htqx 2007-01-09
  • 打赏
  • 举报
回复

不知道也情有可原.
0黄瓜0 2007-01-09
  • 打赏
  • 举报
回复
老师也不知道。。
================
你们老师的水平还真不咋的.也许其他方面牛吧
taodm 2007-01-09
  • 打赏
  • 举报
回复
cout << typeid(a).name();执行一下就知道了。
hxDreamer 2007-01-09
  • 打赏
  • 举报
回复
奥 谢谢啦,我这想起来了。C++这样算是声明函数了。。。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧