12-1
point.h
#include<iostream>
using namespace std;
class Point{
public:
Point(float x=0,float y=0);
void setPoint(float,float);
float getX() const {return x;}
float getY() const {return y;}
friend ostream &operator <<(ostream &,Point &);
protected:
float x=0;float y=0;
};
point.cpp
#include<iostream>
using namespace std;
#include "point.h"
Point::Point(float a,float b){
x=a;y=b;
}
void Point::setPoint(float a,float b){
x=a;y=b;
}
ostream &operator <<(ostream &output,Point &p){
output<<"["<<p.x<<","<<p.y<<"]"<<endl;
return output;
}
circle.h
class Circle:public Point{
public:
Circle(float x=0,float y=0,float r=0);
void setRadius(float);
float getRadius() const;
float area() const;
friend ostream &operator <<(ostream &, Circle &);
protected:
float radius;
};
circle.cpp
#include<iostream>
using namespace std;
#include "point.h"
#include "circle.h"
Circle::Circle(float a,float b,float r):Point(a,b),radius(r){}
void Circle::setRadius(float r){radius= r;}
float Circle::getRadius() const {return radius;}
float Circle::area() const {return 3.14159*radius*radius;}
ostream &operator <<(ostream &output,Circle &c){
output<<"Center=["<<c.x<<","<<c.y<<"],r="<<c.radius<<",area="<<c.area()<<endl;
return output;
}
cylinder.h
class Cylinder:public Circle{
public:
Cylinder(float x=0,float y=0,float r=0,float h=0);
void setHeight(float);
float getHeight() const;
float area() const;
float volume() const;
friend ostream &operator <<(ostream &, Cylinder &);
protected:
float height;
};
cylinder.cpp
#include<iostream>
using namespace std;
#include "point.h"
#include "circle.h"
#include "cylinder.h"
Cylinder::Cylinder(float a,float b,float r,float h):Circle(a,b,r),height(h){}
void Cylinder::setHeight(float h){height=h;}
float Cylinder::getHeight() const{return height;}
float Cylinder::area() const{return 2*Circle::area()+2*3.14159*radius*height;}
float Cylinder::volume() const{return Circle::area()*height;}
ostream &operator <<(ostream &output, Cylinder &cy){
output<<"Center=["<<cy.x<<","<<cy.y<<"],r="<<cy.radius<<",h="<<cy.height
<<"\narea="<<cy.area()<<",volumn="<<cy.volume()<<endl;
return output;
}
main.cpp
#include<iostream>
using namespace std;
#include "point.h"
#include "circle.h"
#include "cylinder.h"
int main(){
Cylinder cy(3.5,6.4,5.2,10);
cout<<"original cylinder:\nn="<<cy.getX()<<",y="<<cy.getY()<<" ,r="<<cy.getRadius()<<" ,h="<<cy.getHeight()
<<" \narea="<<cy.area() <<" ,volumn="<<cy.volume()<<endl;
cy.setPoint(5,8);
cy.setRadius(7.5);
cy.setHeight(15);
cout<<"new cylinder:\n"<<cy;
Point &pRef=cy;
cout<<"pRef:"<<pRef;
Circle &cRef=cy;
cout<<"cRef:"<<cRef;
return 0;
}
12-3-1
#include<iostream>
using namespace std;
class Point{
public:
Point(int a,int b){x=a;y=b;}
~Point(){cout<<"executing Point destructor"<<endl;}
protected:
int x;int y;
};
class Circle:public Point{
public:
Circle(int a,int b,int r):Point(a,b),radius(r){}
~Circle(){cout<<"executing Circle destructor"<<endl;}
private:
int radius;
};
int main(){
Point *p=new Circle(2.5,1.8,4.5);
delete p;
return 0;
}
12-3-2
int main(){
Point *p=new Circle(2.5,1.8,4.5);
Circle *pt=new Circle(2.5,1.8,4.5);
delete pt;
return 0;
}
12-3-3
#include<iostream>
using namespace std;
class Point{
public:
Point(int a,int b){x=a;y=b;}
virtual ~Point(){cout<<"executing Point destructor"<<endl;}
protected:
int x;int y;
};
class Circle:public Point{
public:
Circle(int a,int b,int r):Point(a,b),radius(r){}
~Circle(){cout<<"executing Circle destructor"<<endl;}
private:
int radius;
};
int main(){
Point *p=new Circle(2.5,1.8,4.5);
delete p;
return 0;
}
12-4
#include<iostream>
using namespace std;
class Shape{
public:
virtual float area() const {return 0.0;}
};
class Circle:public Shape{
public:
Circle(float r){radius=r;}
float area() {cout<<"Circle area is:"<<3.14159*radius*radius<<endl;}
protected:
float radius;
};
class Rectangle:public Shape{
public:
Rectangle(float w,float h):width(w),height(h){}
void area(){cout<<"Rectangle area is:"<<width*height<<endl;}
private:
float width;float height;
};
class Triangle:public Shape{
public:
Triangle(float w,float h):width(w),height(h){}
void area(){cout<<"Triangle area is:"<<width*height*0.5<<endl;}
private:
float width;float height;
};
int main(){
Shape *s;
Circle c(2.0);
Rectangle r(3,4);
Triangle t(3,4);
s=&c;c.area();
s=&r;r.area();
s=&t;t.area();
return 0;
}
12-5
#include<iostream>
using namespace std;
class Shape{
public:
virtual float area() const {return 0.0;}
};
class Circle:public Shape{
public:
Circle(float r){radius=r;}
float area() {cout<<"Circle area is:"<<3.14159*radius*radius<<endl;}
protected:
float radius;
};
class Square:public Shape{
public:
Square(float w):width(w){}
void area(){cout<<"Square area is:"<<width*width<<endl;}
private:
float width;
};
class Rectangle:public Shape{
public:
Rectangle(float w,float h):width(w),height(h){}
void area(){cout<<"Rectangle area is:"<<width*height<<endl;}
private:
float width;float height;
};
class Trapezoid:public Shape{
public:
Trapezoid(float u,float b,float h):upper(u),bottom(b),height(h){}
void area(){cout<<"Trapezoid area is:"<<(upper+bottom)*height*0.5<<endl;}
private:
float upper;float bottom;float height;
};
class Triangle:public Shape{
public:
Triangle(float w,float h):width(w),height(h){}
void area(){cout<<"Triangle area is:"<<width*height*0.5<<endl;}
private:
float width;float height;
};
int main(){
Shape *p;
Circle c(2.0);
Square s(2);
Rectangle r(3,4);
Triangle t(3,4);
Trapezoid tr(1,2,3);
p=&c;c.area();
p=&s;s.area();
p=&r;r.area();
p=&t;t.area();
p=&tr;tr.area();
return 0;
}
13-1
#include<iostream>
#include<cmath>
#define S(a,b,c) (a+b+c)/2
#define Area(s,a,b,c) sqrt(s*(s-a)*(s-b)*(s-c))
using namespace std;
int main(){
float a,b,c,s,area;
cout<<"Please enter a,b,c:";
cin>>a>>b>>c;
if(a+b<=c||b+c<=a||c+a<=b)
cerr<<"This is not a triangle!"<<endl;
else
cout<<"The area of the triangle is "<<Area(S(a,b,c),a,b,c)<<endl;
return 0;
}
13-2
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
float a[5];int i;
cout<<"Please enter a set of decimals:";
for(i=0;i<5;i++)
cin>>a[i];
for(i=0;i<5;i++){
cout<<setiosflags(ios::fixed)<<setprecision(3)<<setw(10);
cout<<a[i]<<endl;
}
return 0;
}
13-3
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
int n;
cout<<"Please enter n(n<=20):";
cin>>n;
for(int i=0;i<n;i++)
cout<<setw(20-i)<<setfill(' ')<<" "<<
setw(2*i+1)<<setfill('B')<<"B"<<endl;
return 0;
}
13-4
#include<fstream>
#include<iostream>
#include<stdlib.h>
using namespace std;
void save_to_file();
void get_changed();
void get_from_file();
int main(){
save_to_file();
get_from_file();
get_changed();
return 0;
}
void save_to_file(){
int a[10],i;
ofstream outfile_1("f1.dat");
ofstream outfile_2("f2.dat");
if(!outfile_1){
cerr<<"open f1.dat error!"<<endl;
exit(1);
}
if(!outfile_2){
cerr<<"open f2.dat error!"<<endl;
exit(1);
}
cout<<"Please enter 10 integer numbers:";
for(i=0;i<10;i++){
cin>>a[i];
outfile_1<<a[i]<<" ";
}
cout<<"Please enter 10 integer numbers:";
for(i=0;i<10;i++){
cin>>a[i];
outfile_2<<a[i]<<" ";
}
outfile_1.close();
outfile_2.close();
}
void get_from_file(){
ifstream infile("f1.dat");
if(!infile){
cerr<<"open f1.dat error!"<<endl;
exit(1);
}
ofstream outfile("f2.dat",ios::app);
if(!outfile){
cerr<<"open f2.dat error!"<<endl;
exit(1);
}
int a[10];
for(int i=0;i<10;i++){
infile>>a[i];
outfile<<a[i]<<" ";
}
infile.close();
outfile.close();
}
void get_changed(){
int a[20],i,temp;
ifstream infile("f2.dat");
if(!infile){
cerr<<"open f2.dat error!"<<endl;
exit(1);
}
cout<<endl<<"original order:";
for(i=0;i<20;i++){
infile>>a[i];
cout<<a[i]<<" ";
}
cout<<endl;
for(i=0;i<20;i++){
for(int j=0;j<20-i;j++)
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
infile.close();
ofstream outfile("f2.dat",ios::out);
if(!outfile){
cerr<<"open f2.dat error!"<<endl;
exit(1);
}
cout<<endl<<"New order:";
for(int i=0;i<20;i++){
outfile<<a[i]<<" ";
cout<<a[i]<<" ";
}
cout<<endl;
outfile.close();
}
//23 45 14 87 908 768 95 86 98 67
// 99 6 8 13 43 62 73 109 57 901
13-5
#include<fstream>
#include<iostream>
#include<stdlib.h>
using namespace std;
struct Stuff{
int num;char name[20];int age;float salary;
};
int main(){
Stuff staf[7] = {2001, "zhao", 34, 1203, 2002, "qian", 23, 674, 2003, "sun", 54, 778,2004, "li", 45, 476,2005, "zhou", 39, 656};
fstream iofile("stud.dat",ios::in|ios::out|ios::binary);
if(!iofile){
cerr<<"open error!"<<endl;
abort();
}
for(int i=0;i<5;i++){
iofile.write((char*)&staf[i],sizeof(staf[i]));
cout<<staf[i].num<<" "<<staf[i].name<<" "<<staf[i].age<<" "<<staf[i].salary<<endl;
}
int i=0;
cout<<"Please enter data :";
Stuff s;
for(i=0;i<2;i++){
cin>>s.num>>s.name>>s.age>>s.salary;
iofile.seekp(0,ios::end);
iofile.write((char*)&s,sizeof(s));
iofile.seekp(0,ios::beg);
}
cout<<endl;
for(int i=0;i<7;i++){
iofile.read((char*)&staf[i],sizeof(staf[i]));
cout<<staf[i].num<<" "<<staf[i].name<<" "<<staf[i].age<<" "<<staf[i].salary<<endl;
}
bool flag=0;int m;
cout<<endl<<"Please enter the number you want find:";
int num;
cin>>num;
while(num){
flag=0;
iofile.seekg(0,ios::beg);
for(i=0;i<7;i++){
iofile.read((char*)&staf[i],sizeof(staf[i]));
if (staf[i].num==num){
m=iofile.tellg();
flag=1;
cout<<endl<<num<<" is NO."<<m/sizeof(Stuff)<<endl;
cout<<staf[i].num<<" "<<staf[i].name<<" "<<staf[i].age<<" "<<staf[i].salary<<endl;
break;
}
}
if(!flag)
cout<<endl<<"Cannot find "<<num<<endl;
cout<<"Please enter the number you want find:";
cin>>num;
}
iofile.close();
return 0;
}
//2006 hu 21 2980
//2007 tang 20 8907
13-6
#include<strstream>
#include<iostream>
using namespace std;
int main(){
char c[50]="12 34 65 -223 -32 33 61 99 321 32";
int a[10],i,j,t;
cout<<"array c:"<<c<<endl;
istrstream strin(c,sizeof(c));
for(i=0;i<10;i++)
strin>>a[i];
cout<<"array a:";
for(i=0;i<10;i++)
cout<<a[i]<<" ";
cout<<endl;
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(a[j]>a[j+1]){
t=a[j];a[j]=a[j+1];a[j+1]=t;
}
ostrstream strout(c,sizeof(c));
for(i=0;i<10;i++)
strout<<a[i]<<" ";
strout<<ends;
cout<<"array c :"<<c<<endl;
return 0;
}
14-1
#include<iostream>
#include<cmath>
using namespace std;
void shigen(float a,float b,float c);
int main(){
float a,b,c;
float d=b*b-4*a*c;
cout<<"Please enter a,b,c:";cin>>a>>b>>c;
try{
shigen(a,b,c);
}
catch (float){
cout<<"No solid root."<<endl;
}
return 0;
}
void shigen(float a,float b,float c){
float d=b*b-4*a*c;
if(d<0)
throw d;
else if(d>0)
cout<<"X1="<<(-b+sqrt(d))/2*a<<",X2="<<(-b-sqrt(d))/2*a<<endl;
else if(d==0)
cout<<"X1=X2="<<(-b)/2*a<<endl;
}
14-2
#include<iostream>
#include<string>
using namespace std;
class Student{
public:
Student(int n,string name){
cout<<"constructor - "<<n<<endl;
num=n;name=name;
}
~Student(){
cout<<"destructor - "<<num<<endl;
}
void get_data();
private:
int num;string name;
};
void Student::get_data(){
if(num==0)
throw num;
else
cout<<num<<" "<<name<<endl;
cout<<"in get_data()"<<endl;
}
void fun(){
Student stud1(1101,"tan");
stud1.get_data();
try{
Student stud2(0,"Li");
stud2.get_data();
}
catch(int n){
cout<<"num="<<n<<" ,error!"<<endl;
}
}
int main(){
cout<<"main begin"<<endl;
cout<<"call fun()"<<endl;
fun();
cout<<"main end"<<endl;
return 0;
}
14-3
header1.h
#include<iostream>
#include<string>
using namespace std;
namespace rs{
class Student{
public:
Student(int n,string na,int a,string ad){
name=n;name=na;age=a;addr=ad;}
~Student(){}
void get_data(){
cout<<num<<" "<<name<<" "<<age<<" "<<addr;
}
private:
int num;string name;int age;string addr;
};
}
header2.h
#include<iostream>
#include<string>
using namespace std;
namespace rs{
class Student{
public:
Student(int n,string na,int a,string ad){
name=n;name=na;age=a;addr=ad;}
~Student(){}
void get_data(){
cout<<num<<" "<<name<<" "<<age<<" "<<addr;
}
private:
int num;string name;int age;string addr;
};
}
main.cpp
#include<iostream>
#include<string>
#include "header1.h"
#include "header2.h"
using namespace std;
int main(){
rs::Student stud1(101, "ZhangLei", 18, "Beijing");
stud1.get_data();
jw::Student stud2(102, "WangLei", 'f', 88);
stud2.get_data();
return 0;
}