1.错误代码
#include<iostream>
#include<cstring>
using namespace std;
class teacher
{
public:
teacher(int ,char [] ,char);
void display();
private:
int num;
char name[];//这是形参,而不是是实参,因为没有给定大小,导致 程序错误。
char sex;
} ;
teacher::teacher(int n,char nam[],char s)
{
num=n;
strcpy(name,nam);
sex=s;
}
void teacher::display()
{
cout<<num<<' '<<name<<' '<<sex<<endl;
}
//__________________________________________________________________
class birthdate
{
public:
birthdate(int ,int ,int );
void display();
void change(int ,int ,int );
private:
int year;
int month;
int day;
};
birthdate::birthdate(int y,int m,int d)
{
year=y;
month=m;
day=d;
}
void birthdate::display()
{
cout<<year<<' '<<month<<' '<<day<<endl;
}
void birthdate::change(int y,int m,int d)
{
year=y;
month=m;
day=d;
}
//_____________________________________________________________________
class professor:public teacher
{
public:
professor(int ,char [],char ,int ,int ,int ,float);
void display();
void change(int ,int ,int );
private:
float area;
birthdate birth;
};
professor::professor(int n,char nam[],char s,int y,int m,int d,float a):teacher(n,nam,s),birth(y,m,d)
{
area=a;
}
void professor::display()
{
teacher::display();
birth.display();
cout<<area<<endl;
}
void professor::change(int y,int m,int d)
{
birth.change(y,m,d);
}
int main()
{
professor prof1(3012,"Zhang",'f',1949,10,1,125.4);
prof1.display();
prof1.change(1950,6,1);
prof1.display();
return 0;
}
结果运行,出现乱码,程序错误。
2.给其限定大小范围。
#include<iostream>
#include<cstring>
using namespace std;
class teacher
{
public:
teacher(int ,char [] ,char);
void display();
private:
int num;
char name[20];//给实参定义有大小范围之后,程序正确。
char sex;
} ;
teacher::teacher(int n,char nam[],char s)
{
num=n;
strcpy(name,nam);
sex=s;
}
void teacher::display()
{
cout<<num<<' '<<name<<' '<<sex<<endl;
}
//__________________________________________________________________
class birthdate
{
public:
birthdate(int ,int ,int );
void display();
void change(int ,int ,int );
private:
int year;
int month;
int day;
};
birthdate::birthdate(int y,int m,int d)
{
year=y;
month=m;
day=d;
}
void birthdate::display()
{
cout<<year<<' '<<month<<' '<<day<<endl;
}
void birthdate::change(int y,int m,int d)
{
year=y;
month=m;
day=d;
}
//_____________________________________________________________________
class professor:public teacher
{
public:
professor(int ,char [],char ,int ,int ,int ,float);
void display();
void change(int ,int ,int );
private:
float area;
birthdate birth;
};
professor::professor(int n,char nam[],char s,int y,int m,int d,float a):teacher(n,nam,s),birth(y,m,d)
{
area=a;
}
void professor::display()
{
teacher::display();
birth.display();
cout<<area<<endl;
}
void professor::change(int y,int m,int d)
{
birth.change(y,m,d);
}
int main()
{
professor prof1(3012,"Zhang",'f',1949,10,1,125.4);
prof1.display();
prof1.change(1950,6,1);
prof1.display();
return 0;
}
结果正确。
3.再修改一下。
#include<iostream>
#include<cstring>
using namespace std;
class teacher
{
public:
teacher(int ,string ,char);
void display();
private:
int num;
string name;//将定义的变量进一步简化
char sex;
} ;
teacher::teacher(int n,string nam,char s)
{
num=n;
name=nam;
sex=s;
}
void teacher::display()
{
cout<<num<<' '<<name<<' '<<sex<<endl;
}
//__________________________________________________________________
class birthdate
{
public:
birthdate(int ,int ,int );
void display();
void change(int ,int ,int );
private:
int year;
int month;
int day;
};
birthdate::birthdate(int y,int m,int d)
{
year=y;
month=m;
day=d;
}
void birthdate::display()
{
cout<<year<<' '<<month<<' '<<day<<endl;
}
void birthdate::change(int y,int m,int d)
{
year=y;
month=m;
day=d;
}
//_____________________________________________________________________
class professor:public teacher
{
public:
professor(int ,string ,char ,int ,int ,int ,float);
void display();
void change(int ,int ,int );
private:
float area;
birthdate birth;
};
professor::professor(int n,string nam,char s,int y,int m,int d,float a):teacher(n,nam,s),birth(y,m,d)
{
area=a;
}
void professor::display()
{
teacher::display();
birth.display();
cout<<area<<endl;
}
void professor::change(int y,int m,int d)
{
birth.change(y,m,d);
}
int main()
{
professor prof1(3012,"Zhang",'f',1949,10,1,125.4);
prof1.display();
prof1.change(1950,6,1);
prof1.display();
return 0;
}
结果正确