C++各知识点

来源:互联网 发布:杭州融亿网络科技股份 编辑:程序博客网 时间:2024/06/05 17:08
#include<iostream>#include<string>using namespace std;//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////浅拷贝class Student{  public:  Student(char *name1,float score1);  ~Student();  private:  char *name;  float score;};Student::Student(char *name1,float score1){cout<<"Constructing....."<<name1<<endl;name=new char[strlen(name1)+1];if(name!=0){strcpy(name,name1);score=score1;}}Student::~Student(){cout<<"Destructing....."<<name<<endl;name[0]='\0';delete []name;}int main(){Student stu1("Liming",90);Student stu2=stu1;//调用默认的拷贝构造函数,只是将stu1的值复制到stu2,并没有分配空间//析构stu1时程序崩溃,同一空间两次释放return 0;}//深拷贝class Student{  public:  Student(char *name1,float score1);  Student(Student&stu);  ~Student();  private:  char *name;  float score;};Student::Student(char *name1,float score1){cout<<"Constructing....."<<name1<<endl;name=new char[strlen(name1)+1];if(name!=0){strcpy(name,name1);score=score1;}}Student::Student(Student& stu){cout<<"Copy constructing....."<<stu.name<<endl;name=new char[strlen(stu.name)+1];if(name!=0){strcpy(name,stu.name);score=stu.score;}}Student::~Student(){cout<<"Destructing....."<<name<<endl;name[0]='\0';delete []name;}int main(){Student stu1("Liming",90);Student stu2=stu1;//调用自定义的拷贝构造,分配相应空间return 0;}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////用只有一个参数的构造函数给对象数组赋值class exam{public:exam(int n){x=n;}int get_x(){return x;}private:int x;};int main(){exam ob1[4]={11,22,33,44};for(int i=0;i<4;i++)cout<<ob1[i].get_x()<<" ";return 0;}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////静态成员//1.静态数据成员class Student{public:Student(char *name1,char *stu_no1,float score1);~Student();void show();void show_count_sum_ave();private:char *name;char *stu_no;    float score;static int count;static float sum;static float ave;};Student::Student(char *name1,char *stu_no1,float score1){name=new char[strlen(name1)+1];strcpy(name,name1);stu_no=new char[strlen(stu_no1)+1];strcpy(stu_no,stu_no1);score=score1;++count;sum=sum+score;ave=sum/count;}Student::~Student(){delete []name;delete []stu_no;}void Student::show(){cout<<"\n 姓名:"<<name;cout<<"\n 学号:"<<stu_no;cout<<"\n 成绩:"<<score;}void Student::show_count_sum_ave (){cout<<"\n 学生人数:"<<count;cout<<"\n 平均成绩:"<<ave;}int Student::count = 0;float Student::sum =0.0;float Student::ave =0.0;int main(){Student stu1("Liming","070201",90);stu1.show();stu1.show_count_sum_ave ();Student stu2("zhanghao","070202",80);stu2.show ();stu2.show_count_sum_ave ();return 0;}//2.静态成员函数class Student{public:Student(char *name1,char *stu_no1,float score1);~Student();void show();static void show_count_sum_ave();private:char *name;char *stu_no;    float score;static int count;static float sum;static float ave;};Student::Student(char *name1,char *stu_no1,float score1){name=new char[strlen(name1)+1];strcpy(name,name1);stu_no=new char[strlen(stu_no1)+1];strcpy(stu_no,stu_no1);score=score1;++count;sum=sum+score;ave=sum/count;}Student::~Student(){delete []name;delete []stu_no;--count;sum=sum-score;}void Student::show(){cout<<"\n 姓名:"<<name;cout<<"\n 学号:"<<stu_no;cout<<"\n 成绩:"<<score;}void Student::show_count_sum_ave (){cout<<"\n 学生人数:"<<count;cout<<"\n 平均成绩:"<<ave;}int Student::count = 0;float Student::sum =0.0;float Student::ave =0.0;int main(){Student stu1("Liming","070201",90);stu1.show();Student::show_count_sum_ave ();Student stu2("zhanghao","070202",80);stu2.show ();stu2.show_count_sum_ave ();return 0;}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////友元//友元函数//1.将非成员函数声明为友元函数class Date{public:Date(int y,int m,int d);friend void showDate(Date &);//声明函数showDate()为类Date的友元函数private:int year;int month;int day;};Date::Date(int y,int m,int d){year=y;month=m;day=d;}void showDate(Date &d)//定义友元函数,形参是Date类的引用{cout<<d.year<<"."<<d.month<<"."<<d.day<<endl;}int main(){Date date1(2009,11,14);showDate(date1);//可以访问类对象的各个私有数据成员return 0;}//2.将成员函数声明为友元函数class Date;class Time{public:Time(int h,int m,int s){hour=h;minute=m;sec=s;}void showDate_Time(Date &);private:int hour;int minute;int sec;};class Date{public:Date(int y,int m,int d){year=y;month=m;day=d;}friend void Time::showDate_Time(Date&);private:int year;int month;int day;};void Time::showDate_Time(Date &d){cout<<d.year<<"."<<d.month<<"."<<d.day<<endl;           //作为Date类的友元函数,可以访问Date类对象中的私有数据cout<<hour<<":"<<minute<<":"<<sec<<endl;           //作为Time类的成员函数,可以访问Time类对象中的私有数据}int main(){Date date1(2009,11,14);Time time1(6,12,18);time1.showDate_Time(date1);return 0;}//友元类//一个类作为另一个类的友元类class Date;class Time{public:Time(int h,int m,int s){hour=h;minute=m;sec=s;}void showDate_Time(Date &);private:int hour;int minute;int sec;};class Date{public:Date(int y,int m,int d){year=y;month=m;day=d;}friend Time;//声明Time为Date的友元类,            //则Time中所有的成员函数为Date的友元函数private:int year;int month;int day;};void Time::showDate_Time(Date &d){cout<<d.year<<"."<<d.month<<"."<<d.day<<endl;           //作为Date类的友元函数,可以访问Date类对象中的私有数据cout<<hour<<":"<<minute<<":"<<sec<<endl;           //作为Time类的成员函数,可以访问Time类对象中的私有数据}int main(){Date date1(2009,11,14);Time time1(6,12,18);time1.showDate_Time(date1);return 0;}///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////类的组合//学生类中嵌套这一个成绩类对象class Score{public:Score(double c=0,double e=0,double m=0);void show();private:double computer;double english;double mathematics;};Score::Score(double c,double e,double m){computer=c;english=e;mathematics=m;}void Score::show(){cout<<"Score computer:"<<computer<<endl;    cout<<"Score english:"<<english<<endl;cout<<"Score mathematics:"<<mathematics<<endl;}class Student{public:Student(string name1,double s1,double s2,double s3);void show();private:string name;Score score1;};Student::Student(string name1,double s1,double s2,double s3):score(s1,s2,s3){name=name1;}void Student::show(){cout<<"Name:"<<name<<endl;score1.show();}int main(){Student stu1("Liming",85,80,70);stu1.show();return 0;}

0 0