9-3
#include<iostream>
using namespace std;
class Date{
public:
//有默认参数的构造函数不能重载,会引起歧义
Date(int=1,int=1,int=2005);
void display();
private:
int month;
int year;
int day;
};
Date::Date(int m,int d,int y):month(m),day(d),year(y){
}
void Date::display() {
cout<<month<<"/"<<day<<"/"<<year<<endl;
}
int main(){
Date d1(10,13,2005);
Date d2(12,30);
Date d3(10);
Date d4;
d1.display();
d2.display();
d3.display();
d4.display();
return 0;
}
9-4
#include<iostream>
using namespace std;
class Student{
public:
Student(int ,float );
void display();
private:
int num;
float score;
};
Student::Student(int n,float s):num(n),score(s){
}
void Student::display() {
cout<<num<<" "<<score<<endl;
}
int main(){
Student stu[5]={Student(101,78.5),Student(102,85.5),Student(103,98.5),Student(104,100.0),Student(105,95.5)},*p;
p=stu;int i;
for(i=0;i<5;i+=2)
(p+i)->display();
return 0;
}
9-5
#include<iostream>
using namespace std;
class Student{
public:
Student(int ,float );
int max_value(Student *s);
void display();
int num;
float score;
};
Student::Student(int n,float s):num(n),score(s){
}
int Student::max_value(Student *s){
float max_m=s[0].score;
int m=0;
for(int i=0;i<5;i++)
if(s[i].score>max_m){
max_m=s[i].score;m=i;
}
return m;
}
void Student::display() {
cout<<num<<" "<<score<<endl;
}
int main(){
Student stu[5]={Student(101,78.5),Student(102,85.5),Student(103,98.5),Student(104,100.0),Student(105,95.5)},*p;
int m;
m=stu[5].max_value(stu);
cout<<stu[m].score<<" has best score."<<endl;
return 0;
}
9-7-1
#include<iostream>
using namespace std;
class Student{
public:
Student(int n,float s):num(n),score(s){
}
void change(int n,float s){
num=n;score=s;
}
//常对象只能调用常成员函数
void display() const{
cout<<num<<" "<<score<<endl;
}
private:
int num;
float score;
};
int main(){
const Student stud(101,78.5);
stud.display();
return 0;
}
9-7-2
#include<iostream>
using namespace std;
class Student{
public:
Student(int n,float s):num(n),score(s){
}
void change(int n,float s) const{
num=n;score=s;
}
void display() const{
cout<<num<<" "<<score<<endl;
}
private:
mutable int num;
mutable int score;
};
int main(){
//想修改常函数,改为mutable,成员函数改为const
const Student stud(101,78.5);
stud.display();
stud.change(101,80.5);
stud.display();
return 0;
}
9-7-3
//通过指针修改
#include<iostream>
using namespace std;
class Student{
public:
Student(int n,float s):num(n),score(s){
}
void change(int n,float s){
num=n;score=s;
}
void display() {
cout<<num<<" "<<score<<endl;
}
private:
int num;
float score;
};
int main(){
Student stud(101,78.5);
Student *p=&stud;
p->display();
p->change(101,80.5);
p->display();
return 0;
}
9-7-4
#include<iostream>
using namespace std;
class Student{
public:
Student(int n,float s):num(n),score(s){
}
void change(int n,float s){
num=n;score=s;
}
void display() const{
cout<<num<<" "<<score<<endl;
}
private:
int num;
float score;
};
int main(){
Student stud(101,78.5);
//指向常对象的指针变量,不通过指针修改即可,成员函数const
const Student *p=&stud;
p->display();
stud.change(101,80.5);
p->display();
return 0;
}
9-7-5
#include<iostream>
using namespace std;
class Student{
public:
Student(int n,float s):num(n),score(s){
}
void change(int n,float s){
num=n;score=s;
}
void display(){
cout<<num<<" "<<score<<endl;
}
private:
int num;
float score;
};
int main(){
Student stud(101,78.5);
//指向对象的常指针,不改变指针指向的对象即可
Student *const p=&stud;
p->display();
p->change(101,80.5);
p->display();
return 0;
}
9-8
#include<iostream>
using namespace std;
class Student{
public:
Student(int n,float s):num(n),score(s){
}
void change(int n,float s){
num=n;score=s;
}
void display(){
cout<<num<<" "<<score<<endl;
}
private:
int num;
float score;
};
void fun(Student &stu);
int main(){
Student stud(101,78.5);
fun(stud);
return 0;
}
void fun(Student &stud){
stud.display();
stud.change(101,80.5);
stud.display();
}
9-9
#include<iostream>
using namespace std;
class Product{
public:
Product(int n,int q,float p):num(n),quantity(q),price(p){
};
void total();
static float average();
static void display();
private:
int num;
int quantity;
float price;
static float discount;
static float sum;
static int n;
};
float Product::discount=0.05;
float Product::sum=0;
int Product::n=0;
int main(){
Product pro[3]={
Product(101,5,23.5),
Product(102,12,24.56),
Product(103,100,21.5)
};
for(int i=0;i<3;i++)
pro[i].total();
Product::display();
return 0;
}
void Product::total(){
if(quantity>=10)
sum+=quantity*price*0.98*(1-discount);
else
sum+=quantity*price*(1-discount);
n+=quantity;
}
float Product::average(){
return sum/n;
}
void Product::display(){
cout<<"Sum:"<<sum<<" "<<"average:"<<average()<<endl;
}
9-10
#include<iostream>
using namespace std;
class Date;
class Time{
public:
Time(int,int,int);
friend void display(Date &d,Time &t);
private:
int hour;int minute;int sec;
};
class Date{
public:
Date(int,int,int);
friend void display(Date &d,Time &t);
private:
int month;int day;int year;
};
Time::Time(int h,int m,int s){
hour=h;minute=m;sec=s;
}
Date::Date(int m,int d,int y){
month=m;day=d;year=y;
}
int main(){
Time t1(10,13,56);
Date d1(12 ,25 ,2004);
display(d1,t1);
return 0;
}
void display(Date &d,Time &t){
cout<<d.month<<"/"<<d.day<<"/"<<d.year<<endl;
cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl;
}
9-11
#include<iostream>
using namespace std;
class Date;
class Time{
public:
Time(int,int,int);
void display( Date &);
private:
int hour;int minute;int sec;
};
class Date{
public:
Date(int,int,int);
friend Time;
private:
int month;int day;int year;
};
Time::Time(int h,int m,int s){
hour=h;minute=m;sec=s;
}
void Time::display( Date &d){
cout<<d.month<<"/"<<d.day<<"/"<<d.year<<endl;
cout<<hour<<":"<<minute<<":"<<sec<<endl;
}
Date::Date(int m,int d,int y){
month=m;day=d;year=y;
}
int main(){
Time t1(10,13,56);
Date d1(12 ,25 ,2004);
t1.display(d1);
return 0;
}
9-12
#include<iostream>
using namespace std;
template <class numtype>
class Compare{
public:
Compare(numtype a,numtype b);
numtype max_value();
numtype min_value();
private:
numtype x,y;
};
template <class numtype>
Compare<numtype>::Compare(numtype a,numtype b){
x=a;y=b;
}
template <class numtype>
numtype Compare<numtype>::max_value(){
return (x>y)?x:y;
}
template <class numtype>
numtype Compare<numtype>::min_value(){
return (x<y)?x:y;
}
int main(){
Compare<int> cmp1(3,7);
cout<<cmp1.max_value()<<" is the Maximum of two integer numbers."<<endl;
cout<<cmp1.min_value()<<" is the Minimum of two integer numbers."<<endl<<endl;
Compare<float> cmp2(45.78,93.6);
cout<<cmp2.max_value()<<" is the Maximum of two float numbers."<<endl;
cout<<cmp2.min_value()<<" is the Minimum of two float numbers."<<endl<<endl;
Compare<char> cmp3('a','A');
cout<<cmp3.max_value()<<" is the Maximum of two characters."<<endl;
cout<<cmp3.min_value()<<" is the Minimum of two characters."<<endl;
return 0;
}
10-1
#include<iostream>
using namespace std;
class Complex{
public:
Complex(){real=0;imag=0;}
Complex(double r,double i){real=r;imag=i;}
double get_real(){return real;}
double get_imag(){return imag;}
void display();
private:
double real;
double imag;
};
Complex operator + (Complex &c1,Complex &c2);
void Complex::display(){
cout<<"("<<real;
if(imag>=0)
cout<<"+";
cout<<imag<<"i)"<<endl;
}
int main(){
Complex c1(4,3),c2(5,-10),c3;
c3=c1+c2;
cout<<"c1=";
c1.display();
cout<<"c2=";
c2.display();
cout<<"c3=";
c3.display();
return 0;
}
Complex operator + (Complex &c1,Complex &c2){
return Complex(c1.get_real()+c2.get_real(),c1.get_imag()+c2.get_imag());
}
10-2
#include<iostream>
using namespace std;
class Complex{
public:
Complex(){real=0;imag=0;}
Complex(double r,double i){real=r;imag=i;}
Complex operator+(Complex &c2);
Complex operator-(Complex &c2);
Complex operator*(Complex &c2);
Complex operator/(Complex &c2);
void display();
private:
double real;
double imag;
};
Complex Complex::operator+(Complex &c2){
return Complex(real+c2.real,imag+c2.imag);
}
Complex Complex::operator-(Complex &c2){
return Complex(real-c2.real,imag-c2.imag);
}
Complex Complex::operator*(Complex &c2){
return Complex(real*c2.real-imag*c2.imag,real*c2.imag-imag*c2.real);
}
Complex Complex::operator/(Complex &c2){
double a=c2.real*c2.real-c2.imag*c2.imag;
real=real*c2.real+imag*c2.imag;
imag=imag*c2.real-real*c2.imag;
return Complex(real/a,imag/a);
}
void Complex::display(){
cout<<real;
if(imag>=0)
cout<<"+";
cout<<imag<<"i"<<endl;
}
int main(){
Complex c1(2,1),c2(4,2),c3;
cout<<"c1=";c1.display();
cout<<"c2=";c2.display();
cout<<"c3=";c3=c1+c2;c3.display();
cout<<"c3=";c3=c1-c2;c3.display();
cout<<"c3=";c3=c1*c2;c3.display();
cout<<"c3=";c3=c1/c2;c3.display();
return 0;
}
10-3
#include<iostream>
using namespace std;
class Complex{
public:
Complex(){real=0;imag=0;}
Complex(double r,double i){real=r;imag=i;}
Complex(double r) {real=r;imag=0;}
friend Complex operator+(Complex c1, Complex c2);
void display();
private:
double real;
double imag;
};
Complex operator+(Complex c1, Complex c2){
return Complex(c1.real+c2.real,c1.imag+c2.imag);
}
void Complex::display(){
cout<<real;
if(imag>=0)
cout<<"+";
cout<<imag<<"i"<<endl;
}
int main(){
Complex c1(2,1),c2(4,2),c3;
int i=5;
cout<<"c1=";c1.display();
cout<<"c2=";c2.display();
cout<<"c3=";c3=c1+c2;c3.display();
cout<<"c3=";c3=c1+i;c3.display();
cout<<"c3=";c3=i+c1;c3.display();
return 0;
}
10-4
#include<iostream>
#include<iomanip>
using namespace std;
class Matrix{
public:
Matrix();
Matrix operator+(Matrix &m);
void input();
void display();
private:
int a[2][3];
}ma;
Matrix::Matrix(){
int i,j;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
a[i][j]=0;
}
void Matrix::input(){
int i,j;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
cin>>a[i][j];
}
void Matrix::display(){
int i,j;
for(i=0;i<2;i++){
for(j=0;j<3;j++)
cout<<setw(5)<<a[i][j]<<" ";
cout<<endl;
}
}
Matrix Matrix::operator+(Matrix &m){
int i,j;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
ma.a[i][j]=a[i][j]+m.a[i][j];
return ma;
}
int main(){
Matrix m1,m2,m3;
cout<<"Please enter m1:";
m1.input();
cout<<endl;
cout<<"Please enter m2:";
m2.input();
cout<<endl;
cout<<"t1:"<<endl;
m1.display();
cout<<"t2:"<<endl;
m2.display();
cout<<"t3:"<<endl;
m3=m1+m2;
m3.display();
return 0;
}
10-5
#include<iostream>
#include<iomanip>
using namespace std;
class Matrix{
public:
Matrix();
Matrix operator+(Matrix &m);
friend ostream& operator <<(ostream &output,Matrix &m);
friend istream& operator >>(istream &input,Matrix &m);
private:
int a[2][3];
}ma;
Matrix::Matrix(){
int i,j;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
a[i][j]=0;
}
Matrix Matrix::operator+(Matrix &m){
int i,j;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
ma.a[i][j]=a[i][j]+m.a[i][j];
return ma;
}
ostream& operator <<(ostream &output,Matrix &m){
int i,j;
output<<"The matrix is : "<<endl;
for(i=0;i<2;i++){
for(j=0;j<3;j++)
output<<setw(5)<<m.a[i][j]<<" ";
output<<endl;
}
return output;
}
istream& operator >>(istream &input,Matrix &m){
int i,j;
cout<<"Please enter the matrix : "<<endl;
for(i=0;i<2;i++){
for(j=0;j<3;j++)
input>>m.a[i][j];
}
return input;
}
int main(){
Matrix m1,m2,m3;
cin>>m1;
cin>>m2;
cout<<m1;
cout<<m2;
m3=m1+m2;
cout<<m3;
return 0;
}
10-6
#include<iostream>
#include<iomanip>
using namespace std;
class Complex{
public:
Complex(){real=0;imag=0;}
Complex(double r){real=r;imag=0;}
Complex(double r,double i){real=r;imag=i;}
operator double(){return real;}
void display();
private:
double real;
double imag;
};
void Complex::display(){
cout<<real;
if(imag>=0)
cout<<"+";
cout<<imag<<"i"<<endl;
}
int main(){
Complex c1(3,-4);
double d1=2.5,d2;
d2=d1+c1;
cout<<"d2="<<d2<<endl;
cout<<"c2=";
Complex(d2).display();
return 0;
}
10-7
#include<iostream>
using namespace std;
class Student{
public:
Student(int nu ,string na,char se,float sc){num=nu;name=na;sex=se;score=sc;}
int get_num(){return num;}
string get_name(){return name;}
char get_sex(){return sex;}
float get_score(){return score;}
void display(){
cout<<"num:"<<num<<" name:"<<name<<" sex:"<<sex<<" score:"<<score<<endl;
}
private:
int num;
string name;
char sex;
float score;
};
class Teacher{
public:
Teacher(){}
Teacher(Student &stu){
num=stu.get_num();name=stu.get_name();sex=stu.get_sex();pay=2000;
}
Teacher(int nu ,string na,char se,float p){num=nu;name=na;sex=se;pay=p;}
void display(){
cout<<"num:"<<num<<" name:"<<name<<" sex:"<<sex<<" pay:"<<pay<<endl;
}
private:
int num;
string name;
char sex;
float pay;//工资
};
int main(){
Teacher t1(1001,"Tang",'f',2500),t2;
Student s1(1002,"Zhou",'m',90);
cout<<"Teacher 1 : ";
t1.display();
cout<<endl<<"Student 2 : ";
s1.display();
t2=Teacher(s1);
cout<<endl<<"Teacher 2 : ";
t2.display();
return 0;
}
11-1
#include<iostream>
using namespace std;
class Student{
public:
void get_value(){
cin>>num>>name>>sex;
}
void display(){
cout<<"num: "<<num<<endl;
cout<<"name: "<<name<<endl;
cout<<"sex: "<<sex<<endl;
}
private:
int num;
string name;
char sex;
};
class Student1:public Student{
public:
void get_value_1(){
cin>>age>>addr;
}
void display_1(){
cout<<"age: "<<age<<endl;
cout<<"address: "<<addr<<endl;
}
private:
int age;
string addr;
};
int main(){
Student1 stu;
stu.get_value();
stu.get_value_1();
stu.display();
stu.display_1();
return 0;
}
11-2
#include<iostream>
using namespace std;
class Student{
public:
void get_value(){
cin>>num>>name>>sex;
}
void display(){
cout<<"num: "<<num<<endl;
cout<<"name: "<<name<<endl;
cout<<"sex: "<<sex<<endl;
}
private:
int num;
string name;
char sex;
};
class Student1:private Student{
public:
void get_value_1(){
get_value();
cin>>age>>addr;
}
void display_1(){
display();
cout<<"age: "<<age<<endl;
cout<<"address: "<<addr<<endl;
}
private:
int age;
string addr;
};
int main(){
Student1 stu;
stu.get_value_1();
stu.display_1();
return 0;
}
11-3
#include<iostream>
using namespace std;
class Student{
public:
protected:
int num;
string name;
char sex;
};
class Student1:protected Student{
public:
void get_value_1(){
cin>>num>>name>>sex;
cin>>age>>addr;
}
void display_1(){
cout<<"num: "<<num<<endl;
cout<<"name: "<<name<<endl;
cout<<"sex: "<<sex<<endl;
cout<<"age: "<<age<<endl;
cout<<"address: "<<addr<<endl;
}
private:
int age;
string addr;
};
int main(){
Student1 stu;
stu.get_value_1();
stu.display_1();
return 0;
}
11-4
#include<iostream>
using namespace std;
class Student{
public:
protected:
int num;
string name;
char sex;
};
class Student1:public Student{
public:
void get_value_1(){
cin>>num>>name>>sex;
cin>>age>>addr;
}
void display_1(){
cout<<"num: "<<num<<endl;
cout<<"name: "<<name<<endl;
cout<<"sex: "<<sex<<endl;
cout<<"age: "<<age<<endl;
cout<<"address: "<<addr<<endl;
}
private:
int age;
string addr;
};
int main(){
Student1 stu;
stu.get_value_1();
stu.display_1();
return 0;
}
11-9
#include<iostream>
#include<string>
using namespace std;
class Teacher{
public:
Teacher(){}
Teacher(string nam,int a,char s,string ad,string t,string tit);
void display();
protected:
int age;string name;char sex; string addr;string tell;string title;//职称
};
class Cadre{
public:
Cadre(){}
Cadre(string nam,int a,char s,string ad,string t,string p);
protected:
int age;string name; char sex;string addr; string tell;string post;//职务
};
class Teacher_Cadre:public Teacher,public Cadre {
public:
Teacher_Cadre(){}
Teacher_Cadre(string nam,int a,char s,string ad,string t,string tit,string p,float w):
Teacher(nam,a,s,ad,t,tit),
Cadre(nam,a,s,ad,t,p),
wages(w){}
void show();
private:
float wages;
};
Teacher::Teacher(string nam,int a,char s,string ad,string t,string tit){
age=a;name=nam;sex=s;addr=ad;tell=t;title=tit;
}
void Teacher::display(){
cout<<"name: "<<name<<endl;
cout<<"age: "<<age<<endl;
cout<<"sex: "<<sex<<endl;
cout<<"address: "<<addr<<endl;
cout<<"tell: "<<tell<<endl;
cout<<"title: "<<title<<endl;
}
Cadre::Cadre(string nam,int a,char s,string ad,string t,string p){
age=a;name=nam;sex=s;addr=ad;tell=t;post=p;
}
void Teacher_Cadre::show(){
Teacher::display();
cout<<"post: "<<Cadre::post<<endl;
cout<<"wage: "<<wages<<endl;
}
int main(){
Teacher_Cadre tc("Tang",21,'f',"Shanghai","1888888","Professor","minister",3000);
tc.show();
return 0;
}
11-10
#include<iostream>
#include<string>
using namespace std;
class Teacher{
public:
Teacher(string n,int a,char s):name(n),age(a),sex(s){}
void display(){
cout<<"Name:"<<name<<endl;cout<<"Age:"<<age<<endl;cout<<"Sex:"<<sex<<endl;
}
private:
int age;string name;char sex;
};
class BirthDate{
public:
BirthDate(int y,int m,int d):year(y),month(m),day(d){}
void change(int y,int m,int d){
year=y;month=m;day=d;
}
void display_1(){
cout<<"Birthday:"<<year<<"/"<<month<<"/"<<day<<endl;
}
private:
int year;int month;int day;
};
class Professor:public Teacher {
public:
Professor(string n,int a,char s,int y,int m,int d): Teacher( n,a,s),birthday(y,m,d){}
void change(int y,int m,int d){birthday.change(y,m,d);}
void show(){
Teacher::display();
birthday.display_1();
}
private:
BirthDate birthday;
};
int main(){
Professor p("Zhang",21,'f',1999,2,16);
p.show();
p.change(1999,7,14);
p.show();
return 0;
}