函数
6-1 学生类的构造与析构
#include<bits/stdc++.h>
using namespace std;
class Student
{int num;string name;char sex;
public:Student(int n,string nam,char s):num(n),name(nam),sex(s){cout<<"Constructor called."<<endl;}void display(){cout<<"num:"<<num<<endl;cout<<"name:"<<name<<endl;cout<<"sex:"<<sex<<endl;cout<<endl;}~Student(){cout<<"Destructor called."<<endl;}
};
6-2 体育俱乐部I(构造函数)
Club::Club(string n1, int y, string n2, int wr):name(n1),year(y),c(n2,wr)
{}
void Coach::show(){cout<<name<<" "<<winRate<<"%"<<endl;
}
void Club::show(){cout<<name<<" "<<year<<endl;c.show();
}
6-3 学生成绩的快速录入(构造函数)
class Student
{int no,score;
public:static int count;Student(int n,int s):no(n),score(s){count++;}Student(const Student& s):no(s.no+1),score(s.score){count++;}void display(){cout<<no<<" ";if(score==1)cout<<"Pass"<<endl;else cout<<"Fail"<<endl;}
};
int Student::count=0;
6-4 客户机类
#include<iostream>
using namespace std;
class Client
{static char ServerName;static int ClientNum;
public:Client(){ClientNum++;};static void changeServerName(char a);//注意没有大括号!!!,只是声明static void show();
};
char Client::ServerName='A';
int Client::ClientNum=0;
void Client::changeServerName(char a){ServerName=a;
}
void Client::show(){cout<<"server name:"<<ServerName<<endl;cout<<"num of clients:"<<ClientNum<<endl;
}
//注意都是静态成员函数,在类外定义;
6-5 学生成绩的输入和输出(运算符重载)
class Student
{string name;int score;static int num;//因为需要输出学生序号,可以在输出时++
public:friend istream& operator>>(istream& is,Student& s);friend ostream& operator<<(ostream& os,Student& s);
};
int Student::num=1;
istream& operator>>(istream& is,Student& s){is>>s.name>>s.score;return is;
}
ostream& operator<<(ostream& os,Student& s){os<<Student::num++<<". "<<s.name<<" ";//num注意前面加上Student::if(s.score>=60)cout<<"PASS";else cout<<"FAIL";
}
6-6 时钟模拟
#include<bits/stdc++.h>
using namespace std;
class MyTime
{int h,m,s;
public:MyTime(int h=0,int m=0,int s=0):h(h),m(m),s(s){}friend istream& operator>>(istream& is,MyTime& s);friend ostream& operator<<(ostream& os,MyTime& s);MyTime operator++();
};
istream& operator>>(istream& is,MyTime& s)
{is>>s.h>>s.m>>s.s;return is;
}
ostream& operator<<(ostream& os,MyTime& s)
{os<<s.h<<":"<<s.m<<":"<<s.s;return os;
}
MyTime MyTime::operator++()
{s++;if(s==60){m++,s=0;}if(m==60){h++,m=0;}h%=24;return *this;
}
6-7 使用成员函数重载复数类的运算符+
Complex& Complex::operator+(Complex& com)
{com.realPart+=this->realPart;//com.realPart+=realPartcom.imgPart+=this->imgPart;//com.imgPart+=imgPart;return com;
}
// 因为有引用所以错误(指针错误,即段错误)
// Complex& Complex::operator+(Complex& com)
// {
// Complex c3;
// c3.realPart=com.realPart+this->realPart;
// c3.imgPart=com.imgPart+this->imgPart;
// return c3;
// }
6-8 多重继承派生类构造函数
class Graduate:public Teacher,public Student
{
public:Graduate(string nam,int a,char s,string t,float sco,float w):Student(nam,s,sco),Teacher(nam,a,t),wages(w){}void show(){cout<<"name:"<<name<<endl;cout<<"age:"<<age<<endl;cout<<"sex:"<<sex<<endl;cout<<"score:"<<score<<endl;cout<<"title:"<<title<<endl;cout<<"wages:"<<wages<<endl;}
private:float wages;
};
//注意不要用在类对象里声明,否则是错误的
//发现上面两个类定义的display()没有用处
6-9 抽象类Shape
class Rectangle:public Shape//对于这道题,不用继承也对,因为源代码中声明基类指针,但是没用到,所以可以不用虚函数
{double w,h;
public:Rectangle(double w,double h):w(w),h(h){}double getArea(){return w*h;}double getPerim(){return 2*(w+h);}
};
class Circle:public Shape
{double r;
public:Circle(double r):r(r){}double getArea(){return 3.14*r*r;}double getPerim(){return 2*3.14*r;}
};
6-10 有序数组(类模板)
template <class T>
class MyArray
{
private:T *data;//数组类型int size;
public:MyArray(int n);~MyArray();bool check();void display();void sort();
};template<class T>
MyArray<T>::MyArray(int n)
{size=n;data=new T[n];for(int i=0; i<n; i++)cin>>data[i];
}template<class T>
void MyArray<T>::sort()
{for(int i=1;i<size;i++){for(int j=0;j<size-i;j++){if(data[j]>data[j+1]){T temp=data[j];data[j]=data[j+1];data[j+1]=temp;}}}
}template<class T>
void MyArray<T>::display()
{for(int i=0; i<size; i++){if(i!=0)cout<<" "<<data[i];//注意格式错误,一行后面没有空格else cout<<data[i];}cout<<endl;
}
编程
7-1 字符串替换
#include<bits/stdc++.h>
using namespace std;
void slove(){string a;getline(cin,a);while(1){//a表示总的,b表示每一行的字符串a+='\n';string b;getline(cin,b);if(b=="end")break;a+=b;}string c1,c2;cin>>c1>>c2;int temp=a.find(c1);//找到的是下标while(temp!=-1){a.replace(temp,c1.size(),c2);//用c2替换指定字符串从起始位置temp开始长度为ca.size()的字符 temp=a.find(c1,temp+1);}cout<<a;
}
int main(){slove();
}
7-2 类的定义和使用
#include<bits/stdc++.h>
using namespace std;
int main()
{int a,b,c,d;cin>>a>>b>>c>>d;cout<<a+c<<" "<<b+d;
}
// class Point
// {
// int x,y;
// int x1,y1;
// public:
// Point(int a,int b)
// {
// x=a;
// y=b;
// }
// ~Point(){}
// void work(Point p2)
// {
// x1=x+p2.x;
// y1=y+p2.y;
// }
// int getx1()
// {
// return x1;
// }
// int gety1()
// {
// return y1;
// }
// };
// int main()
// {
// int a,b,c,d;
// cin>>a>>b>>c>>d;
// Point p1(a,b),p2(c,d);
// p1.work(p2);
// cout<<p1.getx1()<<" "<<p1.gety1();
// }
7-5 2017final函数模板
#include<bits/stdc++.h>
using namespace std;
class Complex
{double a,b,c;
public:Complex(double a,double b,double c):a(a),b(b),c(c){}friend double operator - (Complex a, Complex b);
};double operator - (Complex a,Complex b){return sqrt(pow(a.a-b.a,2)+pow(a.b-b.b,2)+pow(a.c-b.c,2));
}template <class T>
double dist(T a,T b){return abs(a-b);
}int main(){int n;while(cin>>n){//如果用switch语句,一个变量名在多个case中不能使用。不能同用变量名!if(n==1){int a,b;cin>>a>>b;cout<<dist(a,b)<<endl;}else if (n==2){double a,b;cin>>a>>b;cout<<dist(a,b)<<endl;}else if (n==3){double a1,a2,a3,b3,b1,b2;cin>>a1>>a2>>a3>>b1>>b2>>b3;Complex a(a1,a2,a3),b(b1,b2,b3);cout<<dist(a,b)<<endl;}}return 0;
}
//下面是switch语句
// #include<bits/stdc++.h>
// using namespace std;
// class Complex
// {
// double a,b,c;
// public:
// Complex(double a,double b,double c):a(a),b(b),c(c){}
// friend double operator - (Complex a, Complex b);
// };
// double operator - (Complex a,Complex b){
// return sqrt(pow(a.a-b.a,2)+pow(a.b-b.b,2)+pow(a.c-b.c,2));
// }
// template <class T>
// double dist(T a,T b){
// return abs(a-b);
// }
// int main(){
// int n;
// while(cin>>n){
// switch(n){
// case 1:
// int a,b;
// cin>>a>>b;
// cout<<dist(a,b)<<endl;
// break;
// case 2:
// double c,d;
// cin>>c>>d;
// cout<<dist(c,d)<<endl;
// break;
// case 3:
// double a1,a2,a3,b3,b1,b2;
// cin>>a1>>a2>>a3>>b1>>b2>>b3;
// Complex e(a1,a2,a3),f(b1,b2,b3);
// cout<<dist(e,f)<<endl;
// break;
// }
// }
// return 0;
// }
7-6 统计单词的数量并输出单词的最后一个字符
#include<bits/stdc++.h>
using namespace std;
int main()
{string s;getline(cin,s,'\n');int k=0;for(int i=1;i<=s.size();i++){if(s[i]==' '&&s[i-1]!=' '){cout<<s[i-1];k++;}}if(s[s.size()-1]!=' ')//特殊样例,最后输入空空空{cout<<s[s.size()-1];k++;}cout<<endl;cout<<k;
}
7-7 组最大数
#include<bits/stdc++.h>
using namespace std;
bool cmp(const string& a,const string& b)
{return (a+b) > (b+a);
}
int main()
{int n;while(cin>>n) {string s;vector<string> v;while(n--) {cin>>s;v.push_back(s);}sort(v.begin(),v.end(),cmp);string res="";for(int i=0;i<v.size();i++) res+=v[i];cout<<res<<endl;}
}
7-8 字符串排序--string类的使用
#include<bits/stdc++.h>
using namespace std;
int main()
{int n;while(cin>>n){vector<string> v;string s;getchar();//cin.get()while( (n--) && getline(cin,s) && s!="stop" )v.push_back(s);for(int i=1;i<v.size();i++){for(int j=0;j<v.size()-i;j++){if(v[j].size()>v[j+1].size()){string s=v[j];v[j]=v[j+1];v[j+1]=s;}}}for(int i=0,n=v.size();i<n;++i) cout<<v[i]<<endl;}
}//用cpm部分正确,有原因百度
// #include<bits/stdc++.h>
// using namespace std;
// bool cmp(const string& a,const string& b)
// {
// if(a.size()==b.size())return a.size()>b.size();//如果存在多个字符串长度相同,则按照原始输入顺序输出。
// return a.size()<b.size();
// }
// int main()
// {
// int n;
// while(cin>>n)
// {
// vector<string> v;
// string s;
// getchar();//或者cin.get();
// while( (n--) && getline(cin,s) && s!="stop" )
// v.push_back(s);
// sort(v.begin(),v.end(),cmp);
// for(int i=0,n=v.size();i<n;++i) cout<<v[i]<<endl;
// }
// }