#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;
}
C++各知识点
最新推荐文章于 2022-08-10 22:36:24 发布