1、下面的程序可以輸出ASCII字符與所對應的數字的對照表。修改下列程序,使其可以輸出字母a到z(或任意兩個字符間)與所對應的數字的對照表。
class table
{
public:
table(int p)
{
i=p;
}
void ascii(void);
protected:
int i;
};
void table::ascii(void)
{
int k=1;
for (;i<127;i++)
{
cout<<setw(4)<<i<<" "<<(char)i;
if((k)%12==0)
cout<<"\n";
k++;
}
cout<<"\n";
}
class der_table:public table
{
public:
der_table(int p,char *m):table(p)
{
c=m;
}
void print(void);
protected:
char *c;
};
void der_table::print(void)
{
cout<<c<<"\n";
table::ascii();
}
int main()
{
der_table obl(32,"ASCII value---char");
obl.print();
return 0;
}
提示:修改后的主程序為:
int main()
{
der_table ob('a','z',"ASCII value---char");
ob.print();
return 0;
}
#include<iostream>
#include<iomanip>
using namespace std;
class table
{
protected:
int i;
int j;
public:
table(int p,int q)
{
i=p;
j=q;
}
void ascii()
{
int k=1;
for(;i<=j;i++)
{
cout<<setw(4)<<i<<" "<<(char)i;
if((k)%12==0)
cout<<endl;
k++;
}
cout<<endl;
}
};
class der_table:public table
{
protected:
char *c;
public:
der_table(int p,int q,char *m):table(p,q)
{
c=m;
}
void print()
{
cout<<c<<endl;
table::ascii();
}
};
int main()
{
der_table ob('a','z',"ASCII value---char");
ob.print();
return 0;
}
2、已有類Time和Date,要求設計一個派生類Birthtime,它繼承類Time和Date,並且增加一個數據成員Childname用於表示小孩的名字,同事設計主程序顯示一個小孩的出生時間和名字。
class Time
{
public:
Time(int h,int m, int s)
{
hours=h;
minutes=m;
seconds=s;
}
void display()
{
cout<<"出生時間:"<<hours<<"時"<<minutes<<"分"<<seconds<<"秒"<<endl;
}
protected:
int hours,minutes,seconds;
};
class Date
{
public:
Date(int m,int d,int y)
{
month=m;
day=d;
year=y;
}
void display()
{
cout<<"出生年月:"<<year<<"年"<<month<<"月"<<day<<"日"<<endl;
}
protected:
int month,day,year;
};
#include<iostream>
#include<string>
using namespace std;
class time
{
protected:
int hours,minutes,seconds;
public:
time(int h,int m,int s)
{
hours=h;
minutes=m;
seconds=s;
}
void display()
{
cout<<"出生時間:"<<hours<<"時"<<minutes<<"分"<<seconds<<"秒"<<endl;
}
};
class date
{
protected:
int month,year,day;
public:
date(int m,int d,int y)
{
month=m;
day=d;
year=y;
}
void display()
{
cout<<"出生年月"<<year<<"年"<<month<<"月"<<day<<"日"<<endl;
}
};
class birthtime:public time,public date
{
private:
string childname;
public:
birthtime(int h,int m,int s,int m1,int d,int y,string n):time(h,m,s),date(m1,d,y)
{
childname=n;
}
void display()
{
time::display();
date::display();
cout<<"名字是:"<<childname<<endl;
}
};
int main()
{
birthtime a(0,6,33,6,29,2000,"jassic");
a.display();
return 0;
}
3、編寫一個學生和教師的數據輸入和顯示程序。學生數據有編號、姓名、性別、年齡、系別和成績,教師數據有編號、姓名、性別、年齡、職稱和部門。要求將編號、姓名、性別、年齡的輸入和顯示設計成一個類Person,並作為學生類Student和教師類Teacher的基類。
#include<iostream>
#include<string>
using namespace std;
class person
{
private:
int num;
string name;
public:
person(int n,string na)
{
cout<<"putin the num:";
cin>>n;
num=n;
cout<<endl<<"putin the name:";
cin>>na;
name=na;
}
void show()
{
cout<<"the name is:"<<name<<endl<<"the number is:"<<num<<endl;
}
};
class student:public person
{
private:
int classnum;
float score;
public:
student(int n,string na,int cn,float s):person(n,na)
{
cout<<"please putin the classnum:";
cin>>cn;
cout<<endl<<"please putin the score:";
classnum=cn;
cin>>s;
score=s;
}
void show1()
{
show();
cout<<"the classnumber is:"<<classnum<<endl<<"the score is:"<<score<<endl;
}
};
class teacher:public person
{
private:
string title;
string depart;
public:
teacher(int n,string na,string t,string d):person(n,na)
{
cout<<"please putin the title:";
cin>>t;
title=t;
cout<<endl<<"please putin the department:";
cin>>d;
depart=d;
}
void show2()
{
show();
cout<<"the title is :"<<title<<endl<<"the department is:"<<depart<<endl;
}
};
int main()
{
int m,cln;
string n;
float sc;
student s(m,n,cln,sc);
s.show1();
string t;
string d;
teacher te(m,n,t,d);
te.show2();
return 0;
}
4、給出下面的基類:
class area
{
protected:
double height;
double width;
public:
area(double h,double w)
{
height=h;
width=w;
}
virtual double getarea()=0;
};
【要求】
(1)建立基類area的倆個派生類rectangle與isosceles,讓每一個派生類都包含一個函數getarea(),分別用來返回矩形與三角形的面積。用構造函數對height與width進行初始化。
(2)寫出主程序,用來求height與width分別為10.0與5.0的矩形面積,以及求height與width分別為4.0與6.0的三角形面積。
(3)要求通過使用基類指針訪問虛函數的方法(即運行時的多態性)分別求出矩形和三角形面積。
#include<iostream>
using namespace std;
class area
{
protected:
double height;
double width;
public:
area(double h,double w)
{
height=h;
width=w;
}
virtual double getarea()=0;
};
class rectangle:public area
{
private:
double a;
public:
rectangle(double a,double b):area(a,b)
{}
virtual double getarea()
{
a=height*width;
return a;
}
};
class isosceles:public area
{
private:
double a;
public:
isosceles(double a,double b):area(a,b)
{}
virtual double getarea()
{
a=0.5*height*width;
return a;
}
};
int main()
{
area *mp;
rectangle r(10.0,5.0);
mp=&r;
cout<<"the area of rectangle is:"<<mp->getarea()<<endl;
isosceles i(4.0,6.0);
mp=&i;
cout<<"the area of isosceles is:"<<mp->getarea()<<endl;
return 0;
}
5、編寫一個程序,遞歸調用被繼承的基類成員函數,實現求素數的功能。
#include<iostream>
using namespace std;
class base
{
private:
int x;
public:
base(int p)
{
x=p;
}
int fun(int j)
{
int t=2,f=1;
for(;t<j&&f==1;t++)
{
if(j%t==0)
f=0;
return f;
}
}
};
class derive:public base
{
protected:
char *c;
public:
derive(char *m):base(2)
{
c=m;
}
int fun1(int l)
{
return base::fun(l);
}
};
int main()
{
derive a("base\n");
int n;
cout<<"please input a int :";
cin>>n;
if(a.fun1(n)==1)
cout<<n<<"is prime number"<<endl;
else
cout<<n<<"is not prime number"<<endl;
return 0;
}