C++各知识点

#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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值