首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++调试许多错,帮忙改下下

2013-11-06 
c++调试好多错,帮忙改下下析构函数和构造函数的初始化列表有问题,我不知道怎么改,帮忙改下下吧,谢谢了。。。#

c++调试好多错,帮忙改下下
析构函数和构造函数的初始化列表有问题,我不知道怎么改,帮忙改下下吧,谢谢了。。。



#include <iostream>
using namespace std;
class Tdate{
private:
    int yy,mm,dd;
public:
    Tdate(int y=2006,int m=01,int d=01);
    Tdate &setYear(int year);
    Tdate &setMonth(int month);
    Tdate *setDay(int day);
    Tdate setDate(int y,int m,int d);
    void display();
~Tdate();

};

Tdate::Tdate(int y,int m,int d):yy(y),mm(m){
dd=d;
}//构造函数 
Tdate& Tdate::setYear(int year){
    yy=year;
    return *this;
}
Tdate&  Tdate::setMonth(int month){
    mm=month;
    return *this;
}

Tdate*  Tdate::setDay(int day){
    dd=day;
    return this;
}
Tdate  Tdate::setDate(int y,int m,int d){
    yy=y; mm=m; dd=d;
    return *this;
}
void Tdate::display(){
    cout<<"addres is: "<<this<<"\t"<<yy<<":"<<mm<<":"<<dd<<endl;
}
~Tdate(){
const int i;
i=1;
cout<<"destructor :"<<i<<endl;
i++;
}

void main(){
    Tdate d1,d2;//L1
    cout<<"d1 ";  d1.display();//L2
    cout<<"d2 ";  d2.display();//L3
    d1.setYear(2007).setMonth(03).setDay(30);//L4
    cout<<"d1 ";  d1.display();//L5
    d1.setDate(2000,01,10).setDay(30);//L6
    cout<<"d1 ";  d1.display();//L7
    Tdate *p;//L8
    p=d1.setDay(21);//L9
    cout<<" p ";//L10
    p->display();//L11
    Tdate d3=d2.setYear(2006).setMonth(4);//L12
    cout<<"d3 "; d3.display();//L13
    d1.setYear(2007).setMonth(03)=d3;//L14
    cout<<"d1 ";  d1.display();//L15
}
[解决办法]
#include <iostream>
using namespace std;
class Tdate{
private:
    int yy,mm,dd;
public:
    Tdate(int y=2006,int m=01,int d=01);
    Tdate &setYear(int year);
    Tdate &setMonth(int month);
    Tdate *setDay(int day);
    Tdate setDate(int y,int m,int d);
    void display();
~Tdate();

};

Tdate::Tdate(int y,int m,int d):yy(y),mm(m){
dd=d;
}//构造函数 
Tdate& Tdate::setYear(int year){
    yy=year;
    return *this;
}
Tdate&  Tdate::setMonth(int month){
    mm=month;
    return *this;
}

Tdate*  Tdate::setDay(int day){
    dd=day;
    return this;
}
Tdate  Tdate::setDate(int y,int m,int d){
    yy=y; mm=m; dd=d;
    return *this;
}
void Tdate::display(){
    cout<<"addres is: "<<this<<"\t"<<yy<<":"<<mm<<":"<<dd<<endl;
}
Tdate::~Tdate(){
int i = 1;
cout<<"destructor :"<<i<<endl;
i++;
}

void main(){
    Tdate d1,d2; //L1
    cout<<"d1 ";  d1.display(); //L2
    cout<<"d2 ";  d2.display(); //L3
    d1.setYear(2007).setMonth(03).setDay(30); //L4
    cout<<"d1 ";  d1.display(); //L5
    d1.setDate(2000,01,10).setDay(30); //L6
    cout<<"d1 ";  d1.display(); //L7
    Tdate *p; //L8
    p=d1.setDay(21); //L9
    cout<<" p "; //L10
    p->display(); //L11
    Tdate d3=d2.setYear(2006).setMonth(4); //L12


    cout<<"d3 "; d3.display(); //L13
    d1.setYear(2007).setMonth(03)=d3; //L14
    cout<<"d1 ";  d1.display(); //L15
}

已更改,无错
[解决办法]
lz析构函数中的i是有多少个Date对象析构了?
那应该这样才对:


class Tdate{
private:
    int yy,mm,dd;
    static int i;//记录析构函数调用
public:
    Tdate(int y=2006,int m=01,int d=01);
    Tdate &setYear(int year);
    Tdate &setMonth(int month);
    Tdate *setDay(int day);
    Tdate setDate(int y,int m,int d);
    void display();
    ~Tdate();

};
int Tdate::i = 1; //初始化静态类成员变量i

Tdate::~Tdate(){
cout<<"destructor :"<<i<<endl;
i++;
}

然后建议lz以后在写main函数的时候,不要用void main(),虽然某些编译器可能允许这样做,但用int main()或者int main(int argc, char* argv[])才是标准的,而且在main的最后记得主动写一个return才好

热点排行