| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1100 人关注过本帖
标题:关于C++中构造函数的问题
只看楼主 加入收藏
oujimmy
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2009-7-13
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:10 
关于C++中构造函数的问题
#include<iostream.h>
class clock
{
private:
    int hour,minutes,second;
public:
    settime();
    showtime();
    clock(int Hour,int Minutes,int Second);
};
clock::settime();
 clock::clock(int Hour,int Minutes,int Second)
{hour=Hour;
minutes=Minutes;
second=Second;
 }
clock::showtime()
{
    cout<<hour<<"时"<<minutes<<"分"<<second<<"秒";}
void main()
{
    int Hour, Minutes, Second;
    cout<<"输出的时间为:"<<endl;
    cin>>Hour>> Minutes>>Second;
    clock myclock;
    myclock.showtime();
}
这里是不是用不用settime()都对运行没有影响的吧?开始时我不用构造函数时可以运行 但改变成运用构造函数时会出现错误 我也早不出问题的所在 请教高手下 谢谢了
搜索更多相关主题的帖子: 函数 构造 
2009-08-07 00:44
zqsf
Rank: 2
等 级:论坛游民
帖 子:26
专家分:90
注 册:2009-8-7
收藏
得分:5 
这是我改过之后的,只是编译没错,没有运行
#include<iostream>
using namespace std;
class clock
{
private:
    int hour,minutes,second;
public:
    void settime();
    void showtime();
    clock(int Hour=0,int Minutes=0,int Second=0);
};
void clock::settime(){};
clock::clock(int Hour,int Minutes,int Second)
{hour=Hour;
minutes=Minutes;
second=Second;
}
void clock::showtime()
{
    cout<<hour<<"时"<<minutes<<"分"<<second<<"秒";}
void main()
{
    int Hour, Minutes, Second;
    cout<<"输出的时间为:"<<endl;
    cin>>Hour>> Minutes>>Second;
    clock myclock;
    myclock.showtime();
}
你问题中的代码问题很多
一:你没有无参数的构造函数,而你在main函数中却以无参数方式调用,我没有给你重新定义无参数的构造函数,只是设置了默认参数
二:不允许在类后重声明成员函数,我给你加上了{},表示空语句块
三:除了构造函数、析构函数、转换函数外,其他函数都应该有返回值类型,不应该空着,C++中不默认为int型
四:你没有加上std名字空间

[ 本帖最后由 zqsf 于 2009-8-7 14:58 编辑 ]
2009-08-07 14:56
cj0608
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-7-16
收藏
得分:0 
楼上的你改的也有问题啊。。一直都是显示0时0分0秒。、
2009-08-07 15:39
zqsf
Rank: 2
等 级:论坛游民
帖 子:26
专家分:90
注 册:2009-8-7
收藏
得分:0 
楼上的,我知道是这样的,因为没有使用参数调用构造函数,只是使用了默认参数,所以一直是0,我只是把楼主的程序编译问题解决了,没有优化他的功能
2009-08-07 16:38
wqa007
Rank: 2
等 级:论坛游民
帖 子:22
专家分:14
注 册:2009-6-24
收藏
得分:5 
我也是新手,虽然不知道你的错在哪里,但自己试着改了些 可以正确显示了 。你也试试吧。一起加油 !!!
#include<iostream>
using namespace std;
int Hour, Minutes, Second;
class clock
{
    private:
        int hour,minutes,second;
    public:
        void settime();
        int showtime();
        clock();
};
//clock::settime();
clock::clock()
{
    hour=Hour;
    minutes=Minutes;
    second=Second;
}
clock::showtime()
{   
   
    cout<< "北京时间:"<< hour<<"时"<<minutes<<"分"<<second<<"秒";
    return 0;
}
void main()
{
   
    cout<<"请输入的时间为:"<<endl;
    cout<<"hour=";
    cin >> Hour;
    cout<<"Minutes=";
    cin >> Minutes ;
    cout<<"Second=";
    cin >> Minutes;
    clock clock1;
    clock1.showtime();
}
2009-08-08 11:58
zqsf
Rank: 2
等 级:论坛游民
帖 子:26
专家分:90
注 册:2009-8-7
收藏
得分:0 
看来改无止境啊!那我还是把他的功能再整一整吧:
#include<iostream>  
using namespace std;
 bool input(int num,int maxlim=60)
 {
     if(num<0||num>maxlim)
         return false;
     return true;
 }
class clock  
{  
private:  
    int hour,minutes,second;  
public:  
    void clock::settime(int,int,int);  
    void showtime();  
    clock(clock &cl);
    clock(int Hour=0,int Minutes=0,int Second=0);  
};  
void clock::settime(int Hour,int Minutes,int Second)
{
    hour=Hour;
    minutes=Minutes;
    second=Second;
    if(!input(Hour,24))
        hour=0;
    if(!input(Minutes))
        minutes=0;
    if(!input(Second))
        second=0;
};  
clock::clock(clock &cl)
{
    hour=cl.hour;
    minutes=cl.minutes;
    second=cl.second;
}
clock::clock(int Hour,int Minutes,int Second)  
{
    hour=Hour;  
    minutes=Minutes;  
    second=Second;  
    if(!input(Hour,24))
        hour=0;
    if(!input(Minutes))
        minutes=0;
    if(!input(Second))
        second=0;
}  
void clock::showtime()  
{  
    cout<<hour<<"时"<<minutes<<"分"<<second<<"秒";}  
void main()  
{  
    int Hour=0, Minutes=0, Second=0;  
    cout<<"输出的时间为:"<<endl;  
    cin>>Hour>> Minutes>>Second;  
    clock myclock(Hour,Minutes,Second);  
    myclock.showtime();  
}  
2009-08-08 13:33
wqa007
Rank: 2
等 级:论坛游民
帖 子:22
专家分:14
注 册:2009-6-24
收藏
得分:0 
楼上的高手。小弟是新手 有些疑问能帮我解释下吗?谢谢!

1.为啥在类的成员函数里能这样啊
  public:  
    void clock::settime(int,int,int);
2.为啥有两个clock函数啊?
  clock(clock &cl);
  clock(int Hour=0,int Minutes=0,int Second=0);
3.为啥函数void clock::settime(int Hour,int Minutes,int Second)
  和函数clock::clock(int Hour,int Minutes,int Second)功能一样啊。一定要这样做吗?
 
希望能教教小弟,谢谢!!!


2009-08-08 15:51
平凡不在
Rank: 2
等 级:论坛游民
帖 子:39
专家分:69
注 册:2009-8-7
收藏
得分:0 
解释
楼上的哥们,我也是个C++新手,但,就你的一些疑问,我的解释如下:           第一个问题,你看书就好了           第二个问题,两个clock函数,都是构造函数,只不过两个构造函数构造的形参不同罢了,第一个是构造一个clock对象,第二个是几个整型数。           第三个问题,从表面上看,两个函数的的作用一样,但,实际是不一样的,set函数是来设定私有数据的,而clock构造函数是用来初始化私有数据的,虽然,在某些时候,两者能通用,但,一般我们根据各自的功能使用
2009-08-08 16:43
zqsf
Rank: 2
等 级:论坛游民
帖 子:26
专家分:90
注 册:2009-8-7
收藏
得分:0 
哈哈,在类里的那个void clock::settime(int,int,int);  是我在改动时不小心弄上的,其实根本没必要加上clock::,加上反而显得没有C++的习惯了,实属失误,不过没影响。关于你的第二个问题,楼上的解释就可以。第三个问题,这两个是不同的,也是习惯问题,clock::clock(int Hour,int Minutes,int Second),这个是构造函数,是在生成类的对象时自动调用的,用于初始化类内的变量,防止出现错误,你可以这样理解,构造函数就是用来自动的初始化变量用的。而void clock::settime(int Hour,int Minutes,int Second)  是我们在对对象内的变量进行改动时用到的函数,属于类的接口函数。当定义该类的一个对象时,系统自动调用构造函数来初始化变量,当生成对象后,如果需要改动变量的值,就通过接口函数来设置
2009-08-08 16:52
wqa007
Rank: 2
等 级:论坛游民
帖 子:22
专家分:14
注 册:2009-6-24
收藏
得分:0 
   谢谢各位, 受教了。

  Let's roll up our sleeves ! ! !

2009-08-08 17:35
快速回复:关于C++中构造函数的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020969 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved