注册 登录
编程论坛 C++教室

[求助]重载构造函数~

六道 发布于 2007-10-25 17:33, 1900 次点击

#include<iostream.h>
class Tdate
{
public:
Tdate(){init(4,15,1995);}
Tdate(int d){init(4,d,1996);}
Tdate(int m,int d){init(m,d,1997);}
Tdate(int m, int d,int y){init(m,d,y);}

protected:
int month;
int day;
int year;

void init(int m,int d,int y)
{
month=m;
day=d;
year=y;
cout<<month<<"/"<<day<<"/"<<year<<endl;
}
};

void main()
{
Tdate aday;
Tdate bday(10);
Tdate cday(1,12);
Tdate dday(1,2,1998);
}


红色部分因为上面类定义的时候虽没参数,但有括号,这里为何不加括号?一加括号就不输出~

15 回复
#2
永夜的极光2007-10-25 17:56
Tdate()是无参构造函数,函数当然要有个括号

Tdate aday;这样是定义了一个Tdate类型的变量,名字叫aday,变量怎么能加括号呢?
#3
xskowscut2007-10-25 18:02
本身如果没有重载构造函数的话,声明对象就是这样写的啊,不用带括号,因为没有参数传递。
#4
travelling2007-10-25 18:06
  我看了一下书,书上说如果加上括号,那就表明你是在对名为aday函数的声明,该函数不接受任何参数,并返回一个类型为Tdate的值。而你此时在调用无参构造函数,所以不加括号。  不知道我讲得对不对,若不对请不要怪我,我也刚开始学C++。
#5
六道2007-10-25 18:27
回复:(xskowscut)本身如果没有重载构造函数的话,声...
恩,前面调用无参构造函数也不用的,头昏了,现在知道了~~

谢谢大家~
#6
永夜的极光2007-10-25 18:37
以下是引用travelling在2007-10-25 18:06:51的发言:
我看了一下书,书上说如果加上括号,那就表明你是在对名为aday函数的声明,该函数不接受任何参数,并返回一个类型为Tdate的值。而你此时在调用无参构造函数,所以不加括号。 不知道我讲得对不对,若不对请不要怪我,我也刚开始学C++。

对的,可以这么理解

#7
neufcl2007-10-25 21:01
#8
yanyananlin2007-10-25 21:38

用protected可以代替private吗?

[此贴子已经被作者于2007-10-25 21:40:19编辑过]

#9
六道2007-10-25 22:40
回复:(yanyananlin)用protected可以代替private吗?...

这里应该是可以的,他们的区分主要体现在类的继承中.

#10
yanyananlin2007-10-26 22:11

哦,谢谢,那在类的继承中有什么区别啊?可以具体说说吗?

#11
lw20072007-10-27 18:31

有些数据为了实现保护,我们希望类以外的函数不能调用它,但它的派生类能访问到,就在基类 声明为 protected 权限,那他的继承类就能访问到他了.如果声明为私有,那他的派生类就访问不到了

#12
yanyananlin2007-10-27 21:01

哦,明白了,谢谢了~

#13
negatlov2007-10-31 17:30
我要有更大的耐心!
#14
六道2007-11-01 22:28
以下是引用lw2007在2007-10-27 18:31:42的发言:

有些数据为了实现保护,我们希望类以外的函数不能调用它,但它的派生类能访问到,就在基类 声明为 protected 权限,那他的继承类就能访问到他了.如果声明为私有,那他的派生类就访问不到了

正解~

#15
pengsen2007-11-01 22:34
这个类再派生有什么用吗?
#16
a217zxg2007-11-03 20:19
   定义一个不带初始值的对象时,如果加括号就会不知道调用哪一个构造函数了,
1