谭浩强C++(第三版)(4)-12-14章

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;
}
发布了24 篇原创文章 · 获赞 9 · 访问量 2748

猜你喜欢

转载自blog.csdn.net/fancyZT/article/details/104335460