第3章 【例题】(完整版)

news2025/4/7 0:12:23

目录

前言

【例3.1】有关成绩结构体的例子 

【例3.2】使用Score类的完整程序

【例 3.3】一个存在错误的程序

【例3.4】用对象赋值语句的例子 

【例3.5】为类Score定义一个构造函数

【例3.6】建立对象的同时,用构造函数给数据成员赋初值

【例3.7】用成员初始化列表对数据成员进行初始化

【例3.8】类成员初始化的顺序

【例3.9】带有默认参数的构造函数

【例3.10】含有构造函数和析构函数的Score类

【例3.11】较完整的学生类例子

【例3.12】正确对数据成员赋初值

【例3.13】用初始值列表初始化公有数据成员

【例3.14】分析下列程序的运行结果

【例3.15】构造函数的重载

【例3.16】计时器的实现

【例3.17】自定义拷贝构造函数

【例3.18】默认拷贝构造函数的调用

【例3.19】调拷贝构造函数的三种情况用

【例3.20】分析下列程序的运行结果

【例3.21】有关浅拷贝的例子

【例3.22】有关深拷贝的例子


前言

基于教材:c++面向对象程序设计(第三版)陈维兴 林小茶 编著      第三章的所有例题

【例3.1】有关成绩结构体的例子 

//3.1有关成绩结构体的例子
#include <iostream>
using namespace std;
struct Score            //声明了一个名为Score的结构体
{   int mid_exam;
	int fin_exam;
};
int main()
{
	Score score1;
	score1.mid_exam=80;//可以在结构体外直接访问数据mid_exam
	score1.fin_exam=88;//可以在结构体外直接访问数据fin_exam
	cout<<"期中成绩:"<<score1.mid_exam<<"\n期末成绩:"<<score1.fin_exam
	<<"\n总评成绩:"<<(int)(0.3*score1.mid_exam+0.7*score1.fin_exam)<<endl;
	return 0;
}

【例3.2】使用Score类的完整程序

//3.2使用Score类的完整程序
#include <iostream>
using namespace std;
class Score{
	public:
		void setScore(int m,int f) {
			mid_exam=m;
			fin_exam=f;
		}
		void showScore() {
			cout<<"\n期中成绩:"<<mid_exam<<"\n期末成绩:"<<fin_exam<<"\n";
			cout<<"总评成绩:"<<(int)(0.3*mid_exam+0.7*fin_exam)<<endl;
		}
	private:
		int mid_exam;       //私有数据成员
		int fin_exam;       //私有数据成员
};
int main()
{
	Score op1,op2;          //定义对象op1和op2;
	op1.setScore(80,88);
	//调用op1的成员函数setScore(),给op1的数据成员赋值
	op2.setScore(90,92);
	//调用对象op2的成员函数setScore(),给op2的数据成员赋值
	op1.showScore();//调用op1的成员函数showScore()
	op2.showScore();//调用op的成员函数showScore()
	return 0;
}

【例 3.3】一个存在错误的程序

//3.3一个存在错误的程序
#include <iostream>
using namespace std;
class Score{
	public:
		void setScore(int m,int f)
		{
			mid_exam=m;
			fin_exam=f;
		}
		void showScore()
		{
			cout<<"\n期中成绩:"<<mid_exam<<"\n期末成绩:"<<fin_exam<<"\n";
			cout<<"总评成绩:"<<(int)(0.3*mid_exam+0.7*fin_exam)<<endl;
		}
	private:
		int mid_exam;       //私有数据成员
		int fin_exam;       //私有数据成员
};
int main()
{
	Score op1,op2;          //定义对象op1和op2;
	op1.setScore(80,88);
	//调用op1的成员函数setScore(),给op1的数据成员赋值
	op2.setScore(90,92);
	//调用对象op2的成员函数setScore(),给op2的数据成员赋值
//	cout<<"\n期中成绩:"<<op1.mid_exam<<"\n期末成绩"<<op1.fin_exam<<endl;
//从类的外部访问对象的私有成员是错误的,除非公有数据成员
	op1.showScore();//调用op1的成员函数showScore()
	op2.showScore();//调用op的成员函数showScore()
	Score op3,*ptr;
	ptr=&op3;
	(*ptr).setScore(90,98);
	ptr->showScore();
	return 0;
}

 

【例3.4】用对象赋值语句的例子 

//3.4用对象赋值语句的例子
 #include <iostream>
using namespace std;
class Score{
	public:
		void setScore(int m,int f) {
			mid_exam=m;
			fin_exam=f;
		}
		void showScore() {
			cout<<"\n期中成绩:"<<mid_exam<<"\n期末成绩:"<<fin_exam<<"\n";
			cout<<"总评成绩:"<<(int)(0.3*mid_exam+0.7*fin_exam)<<endl;
		}
	private:
		int mid_exam;       //私有数据成员
		int fin_exam;       //私有数据成员
};
int main()
{
	Score op1,op2;          //定义对象op1和op2;
	op1.setScore(80,88);
	//调用op1的成员函数setScore(),给op1的数据成员赋值
	op2=op1;
	//将对象op1数据成员的值赋给对象op2
	op2.showScore();
	return 0;
}

 

【例3.5】为类Score定义一个构造函数

//3.5为类Score定义一个构造函数
#include <iostream>
using namespace std;
class Score{
	public:
		Score(int m,int f);//声明构造函数Score()的原型
		void setScore(int m,int f);
		void showScore();
	private:
		int mid_exam;
		int fin_exam;//私有数据成员
};
Score::Score(int m,int f)//定义构造函数Score()
{
	cout<<"构造函数使用中..."<<endl;
	mid_exam=m;
	fin_exam=f;
}
int main()
{
	
}

【例3.6】建立对象的同时,用构造函数给数据成员赋初值

//3.6建立对象的同时,用构造函数给数据成员赋初值
#include <iostream>
using namespace std;
class Score{
	public:
		Score(int m,int f);//声明构造函数Score()的原型
		void setScore(int m,int f);
		void showScore();
	private:
		int mid_exam;
		int fin_exam;//私有数据成员
};
Score::Score(int m,int f)//定义构造函数Score()
{
	cout<<"构造函数使用中..."<<endl;
	mid_exam=m;
	fin_exam=f;
}
void Score::setScore(int m,int f)
{
	mid_exam=m;
	fin_exam=f;
}
inline void Score::showScore()
{
	cout<<"\n期中成绩:"<<mid_exam<<"\n期末成绩:"<<fin_exam<<"\n";
	cout<<"总评成绩:"<<(int)(0.3*mid_exam+0.7*fin_exam)<<endl;
}
int main()
{
	Score score1(80,88);//定义类Score的对象score1,自动调用构造函数
						//给对象score1的数据成员赋初值
    cout<<endl<<"成绩输出:";
    score1.showScore();//调用成员函数showScore(),显示score1的数据
    score1.setScore(90,92);
    cout<<endl<<"成绩输出:";
	score1.showScore();
	return 0;
}

【例3.7】用成员初始化列表对数据成员进行初始化

//3.7用成员初始化列表对数据成员进行初始化
#include <iostream>
using namespace std;
class A{
	public:
		A(int x1):x(x1),rx(x),pi(3.14)//用成员初始化列表对引用类型的数据成员赋值
		{}
	    void print()//rx和const修饰的数据成员pi进行初始化
	    {
	    	cout<<"x="<<x<<"  "<<"rx="<<rx<<"  "<<"pi="<<pi<<endl;
		}
	private:
		int x;
		int& rx;//rx是整形变量的引用
		const double pi;//pi是用const修饰的常量
};
int main()
{
	A a(10);
	a.print();
	return 0;
}

【例3.8】类成员初始化的顺序

//3.8类成员初始化的顺序
#include <iostream>
using namespace std;
class D{
	public:
		D(int i):mem2(i),mem1(mem2+1)//是按照mem1,mem2的顺序(数据成员声明的顺序)
		{                            //进行初始化的。mem1先进行初始化,由于mem2还未被
									 //初始化,所以此时是个随机数
			cout<<"mem1: "<<mem1<<endl;
			cout<<"mem2: "<<mem2<<endl;
		}
	private:
		int mem1;
		int mem2;
};
int main()
{
	D d(15);
	return 0;
}

【例3.9】带有默认参数的构造函数

//3.9带有默认参数的构造函数
#include <iostream>
using namespace std;
class Score{
	public:
		Score(int m=0,int f=0);//声明构造函数Score()的原型
		void setScore(int m,int f);
		void showScore();
	private:
		int mid_exam;//私有数据成员
		int fin_exam;//私有数据成员
};
Score::Score(int m,int f): mid_exam(m),fin_exam(f)//定义构造函数Score()
{
	cout<<"构造函数使用中..."<<endl;
}
void Score::setScore(int m,int f)
{
	mid_exam=m;
	fin_exam=f;
}
inline void Score::showScore()
{
	cout<<"\n期中成绩:"<<mid_exam<<"\n期末成绩:"<<fin_exam<<"\n";
	cout<<"总评成绩:"<<(int)(0.3*mid_exam+0.7*fin_exam)<<endl;
}
int main()
{
	Score op1(80,88);//传递两个实参
	Score op2(90);//只传递了一个实参,第二个参数用默认值
	Score op3;//没有传递实参,全部用默认值
	op1.showScore();
	op2.showScore();
	op3.showScore();
	return 0;
}

 

【例3.10】含有构造函数和析构函数的Score类

//3.10含有构造函数和析构函数的Score类
#include <iostream>
using namespace std;
class Score{
	public:
		Score(int m,int f);//声明构造函数Score()的原型
		~Score();//声明析构函数
		void setScore(int m,int f);
		void showScore();
	private:
		int mid_exam;//私有数据成员
		int fin_exam;//私有数据成员
};
Score::Score(int m,int f): mid_exam(m),fin_exam(f)//定义构造函数Score()
{
	cout<<"构造函数使用中..."<<endl;
}
Score::~Score()//定义析构函数
{cout<<endl<<"析构函数使用中..."<<endl;}
void Score::setScore(int m,int f)
{
	mid_exam=m;
	fin_exam=f;
}
inline void Score::showScore()
{
	cout<<"\n期中成绩:"<<mid_exam<<"\n期末成绩:"<<fin_exam<<"\n";
	cout<<"总评成绩:"<<(int)(0.3*mid_exam+0.7*fin_exam)<<endl;
}
int main()
{
	Score score1(80,88);//定义类Score的对象Score1,自动调用构造函数,给对象Score的数据成员赋初值
	cout<<endl<<"成绩输出:";
	score1.showScore();//调用成员函数showScore(),显示score1的数据
	score1.setScore(90,92);
	cout<<endl<<"成绩输出:";
	score1.showScore();//调用成员函数showScore(),显示score1的数据
	return 0;//这条语句之后,析构函数自动被调用
}

【例3.11】较完整的学生类例子

//3.11较完整的学生类例子
#include <iostream>
#include<string>
using namespace std;
class Student{
	public:
		Student(char *name1,char *stu_no1,float score1);//声明构造函数
		~Student();//声明析构函数
		void modify(float score1);//成员函数,用以修改数据
		void show();//成员函数,用以显示数据
    private:
    	char *name;//学生姓名
    	char *stu_no;//学生学号
    	float score;//学生成绩
};
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;
}
Student::~Student()//定义析构函数
{
	delete []name;
	delete []stu_no;
	cout<<endl<<"析构函数使用中..."<<endl;
}
void Student::modify(float score1)
{
	score=score1;
}
void Student::show()
{
	cout<<"姓名:"<<name<<endl;
	cout<<"学号:"<<stu_no<<endl;
	cout<<"分数:"<<score<<endl;
}
int main()
{
	Student stu1("黎明","201502021",90);//定义类Student的对象stu1,调用构造函数,初始化对象stu1
	stu1.show();//调用成员函数show(),显示stu1的数据
	stu1.modify(88);//调用成员函数modify(),修改stu1的数据
	cout<<"修改后:-------"<<endl;
	stu1.show();//调用成员函数show(),显示stu1修改后的数据
}

 

可以正常运行,但编译有警告 

【例3.12】正确对数据成员赋初值

//3.12正确对数据成员赋初值
#include <iostream>
using namespace std;

class Myclass{
	public:
		int no;
};
int main()
{
	Myclass a;
	a.no=2015;
	cout<<a.no<<endl;
	return 0;
}

 

如果将程序修改为:

//将3.12程序修改
#include <iostream>
using namespace std;
class Myclass{
	public:
		int no;
};
int main()
{
	Myclass a;
	cout<<a.no<<endl;
	return 0;
}

 

也许我用的是新版编译器,没有出现像书上那样的报错

实际上可以理解为调用了默认的构造函数给数据成员赋初值,默认的构造函数一般只负责给对象分配存储空间,而不承担给数据成员赋初值的任务。

但这个代码如果加上一个带参数的的构造函数一定错误。 因为:

在类中一旦定义了带参数的构造函数,系统将不再提供无参的默认的构造函数,需要自己再重新定义一个无参的构造函数以代替默认的构造函数。

如下:

#include <iostream>
using namespace std;
class Myclass{
	public:
		Myclass(int no1)
		{
			no=no1;
		}
		int no;
};
int main()
{
	Myclass a;
	cout<<a.no<<endl;
	return 0;
}

编译错误提示: 

而加上一个无参的构造函数或者定义对象时给定初值就没问题了。 

【例3.13】用初始值列表初始化公有数据成员

//3.13用初始值列表初始化公有数据成员
#include <iostream>
using namespace std;
class Myclass{
	public:
		char name[10];
		int no;
};
int main()
{
	Myclass a={"chen",25};
	cout<<a.name<<"  "<<a.no<<endl;
	return 0;
}

【例3.14】分析下列程序的运行结果

//3.14分析下列程序的运行结果
#include <iostream>
using namespace std;
class Score{
	public:
		Score(int m,int f);//声明构造函数Score()的原型
		~Score();//声明析构函数
		void setScore(int m,int f);
		void showScore();
	private:
		int mid_exam;//私有数据成员
		int fin_exam;//私有数据成员
};
Score::Score(int m,int f): mid_exam(m),fin_exam(f)//定义构造函数Score()
{
	cout<<"构造函数使用中..."<<endl;
}
Score::~Score()//定义析构函数
{   cout<<endl<<"析构函数使用中..."<<endl;  }
void Score::setScore(int m,int f)
{
	mid_exam=m;
	fin_exam=f;
}
inline void Score::showScore()
{
	cout<<"\n期中成绩:"<<mid_exam<<"\n期末成绩:"<<fin_exam<<"\n";
	cout<<"总评成绩:"<<(int)(0.3*mid_exam+0.7*fin_exam)<<endl;
}
int main()
{
	Score score1;//定义类Score的对象score1,自动调用构造函数
	score1.setScore(80,88);//给类对象score1的数据成员赋初值
	cout<<endl<<"成绩输出";
	score1.showScore();
	return 0;
}
//当类中定义了带有参数的构造函数之后,系统将不再给它提供默认的构造函数
//解决办法:
//1. 再类中添加一个无参数的构造函数
//Score()
//{ }
//2.或在主函数中给对象参数
//int main()
//{
//	Score score(80,88);
//}

 

【例3.15】构造函数的重载

//【3.15】构造函数的重载
#include <iostream>
using namespace std;
class Score{
	public:
		Score(int m, int f);//声明有参数的构造函数
		Score();//声明无参数的构造函数
		~Score();//声明析构函数
		void setScore(int m,int f);
		void showScore();
	private:
		int mid_exam;//私有数据成员
		int fin_exam;//私有数据成员
};
Score::Score(int m,int f)//定义有参数的构造函数
{
	cout<<"构造..."<<endl;
	mid_exam=m;
	fin_exam=f;
}
Score::Score()//定义无参数的构造函数
{   cout<<"构造函数使用中..."<<endl;    }
Score::~Score()
{
	cout<<endl<<"析构函数使用中..."<<endl;
}
void Score::setScore(int m, int f)
{
	mid_exam=m;
	fin_exam=f;
}

inline void Score::showScore()
{
	cout<<"\n期中成绩:"<<mid_exam<<"\n期末成绩:"<<fin_exam<<"\n";
	cout<<"总评成绩:"<<(int)(0.3*mid_exam+0.7*fin_exam)<<endl;
}


int main()
{
	Score score1;//定义类Score的对象score1,调用无参构造函数
	score1.setScore(80,88);//给对象score1的数据成员赋初值
	cout<<endl<<"成绩输出:";
	score1.showScore();//显示score1的数据
	Score score2(90,92);//定义义类Score的对象score2,调用有参构造函数
	cout<<endl<<"成绩输出:";
	score2.showScore();//显示score2的数据
	return 0;
}

【例3.16】计时器的实现

//3.16计时器的实现
#include <iostream>
#include<stdlib.h>
#include<string>
using namespace std;
class Timer{
	public:
		Timer()//定义无参数的构造函数,将seconds初始化为零
		{	seconds=0;	}
		Timer(char* t)//定义一个含数字串参数的构造函数
		{	seconds=atoi(t);	}//atoi函数功能:将数字串转为整形
		Timer(int t)//定义一个含整形参数的构造函数
		{	seconds=t;	}
		Timer(int min,int sec)//定义含两个整形参数的构造函数
		{	seconds=min*60+sec;	}
		int showtime()
		{	cout<<"时间="<<seconds<<"秒"<<endl;	}
		private:
			int seconds;
};
int main()
{
    Timer a,b(10),c("20"),d(1,10);
    a.showtime();b.showtime();c.showtime();d.showtime();
}

【例3.17】自定义拷贝构造函数

//3.17自定义拷贝构造函数
#include <iostream>
using namespace std;
class Score{
	public:
		Score(int m,int f);//声明有参数的构造函数
		Score();//声明无参数的构造函数
		Score(const Score &p);//自定义拷贝构造函数
							  //拷贝构造函数是函数名与类名相同,参数是同类对象的引用
		~Score();//声明析构函数
		void setScore(int m,int f);
		void showScore();
	private:
		int mid_exam;
		int fin_exam;
};
Score::Score(int m,int f)//定义有参数的构造函数
{
	cout<<"构造函数使用中..."<<endl;
	mid_exam=m;
	fin_exam=f;
}
Score::Score()//定义无参数的构造函数
{}
Score::~Score()//定义析构函数
{	cout<<"析构函数使用中...\n";}
Score::Score(const Score &p)//自定义的拷贝构造函数
{
	mid_exam=2*p.mid_exam;
	fin_exam=2*p.fin_exam;
	cout<<"拷贝构造函数使用中...\n";
}
void Score::setScore(int m,int f)
{
	mid_exam=m;
	fin_exam=f;
}

inline void Score::showScore()
{
	cout<<"\n期中成绩:"<<mid_exam<<"\n期末成绩:"<<fin_exam<<"\n";
	cout<<"总评成绩:"<<(int)(0.3*mid_exam+0.7*fin_exam)<<endl;
}
int main()
{
	Score score1(90,92);//定义类Score的对象,调用有参构造函数
	Score score2(score1);//拷贝构造函数,拷贝构造函数只在创建对象时被调用
//	Score score2=score1;//作用是一样的
	cout<<endl<<"成绩输出...";
	score1.showScore();
//	cout<<endl<<"成绩输出...";
//	score2.showScore();
	return 0;
}

 

【例3.18】默认拷贝构造函数的调用

//3.18默认拷贝构造函数的调用
#include <iostream>
using namespace std;
class Score{
	public:
		Score(int m,int f);//声明有参数的构造函数
		~Score();
		void showScore();
	private:
		int mid_exam;
		int fin_exam;//私有数据成员
};
Score::Score(int m,int f)
{
	cout<<"构造函数使用中...";
	mid_exam=m;
	fin_exam=f;
}
Score::~Score()  {	cout<<"析构函数使用中...\n";  }
void Score::showScore()
{
	cout<<"\n期中成绩:"<<mid_exam<<"\n期末成绩:"<<fin_exam<<"\n";
	cout<<"总评成绩:"<<(int)(0.3*mid_exam+0.7*fin_exam)<<endl;
}
int main()
{
	Score p1(80,88);//定义对象p1,调用普通构造函数初始化对象p1
	Score p2(p1);//以代入法调用了默认的拷贝函数,用对象p1初始化对象p2
	Score p3=p1;//以赋值法调用默认的拷贝函数,用对象p1初始化p3
	p1.showScore();
	p2.showScore();
	p3.showScore();
	cout<<endl;
	return 0;
}

 

【例3.19】调拷贝构造函数的三种情况用

//3.19调用拷贝构造函数的三种情况
#include <iostream>
using namespace std;
class Score{
	public:
		Score(int m,int f);//声明有参数的构造函数
		Score(const Score &p);
		void showScore();
	private:
		int mid_exam;
		int fin_exam;
};
Score::Score(int m,int f)
{
	cout<<"构造函数使用中...";
	mid_exam=m;
	fin_exam=f;
}
Score::Score(const Score &p)//自定义拷贝构造函数
{
	mid_exam=p.mid_exam;
	fin_exam=p.fin_exam;
	cout<<"拷贝构造函数使用中...\n";
}
void Score::showScore()
{
	cout<<"\n期中成绩:"<<mid_exam<<"\n期末成绩:"<<fin_exam<<"\n";
	cout<<"总评成绩:"<<(int)(0.3*mid_exam+0.7*fin_exam)<<endl;
}
void fun1(Score p)//形参是对象,在这里调用了拷贝构造函数。
{
	p.showScore();
}
Score fun2()
{
	Score p4(80,88);
	return p4;//renturn时,调用了拷贝构造函数,将p4拷贝倒匿名对象中。
}
int main()
{
	Score p1(80,88);//定义对象p1,第1次调用普通的构造函数
	p1.showScore();
	Score p2(p1);//第一次调用拷贝构造函数,用对象p1初始化对象p2
	p2.showScore();
	Score p3=p1;//第二次调用拷贝构造函数
	p3.showScore();
	fun1(p1);//对象p1作为fun1()的实参,第三次调用拷贝构造函数
	p2=fun2();//在哪函数fun()2内部定义对象时,第2次调用普通的构造函数
			  //函数的返回值是对象,第4次调用拷贝构造函数,
			  //但在匿名对象给p2赋值时,不会调用拷贝构造函数,函数结束时,
			  //匿名对象也随之消失
    p2.showScore();
    return 0;
}

【例3.20】分析下列程序的运行结果

//3.20分析下列程序的运行结果
#include <iostream>
using namespace std;
class Coord{
	public:
		Coord(int a=0,int b=0);//声明构造函数
		Coord(const Coord &p);//声明拷贝构造函数
		~Coord()
		{	cout<<"析构函数使用中...\n";	}
		void print()
		{	cout<<x<<" "<<y<<endl;	}
		int getX()
		{	return x;	}
		int getY()
		{	return y;	}
	private:
		int x,y;
};
Coord::Coord(int a,int b)//定义构造函数
{
	x=a;
	y=b;
	cout<<"构造函数使用中...\n";
}
Coord::Coord(const Coord &p)//定义拷贝构造函数
{
	x=p.x;
	y=p.y;
	cout<<"拷贝构造函数使用中...\n";
}
Coord fun(Coord p)//函数fun()的形参是对象
{
	cout<<"函数使用中...\n";
	int a,b;
	a=p.getX()+10;
	b=p.getY()+20;
	Coord r(a,b);
	return r;//函数fun()的返回值是对象
}
int main()
{
	Coord p1(30,40);
	Coord p2;
	Coord p3(p1);
	p2=fun(p3);
	p2.print();
	return 0;
}

 

【例3.21】有关浅拷贝的例子

//3.21有关浅拷贝的例子
#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<<"构造函数使用中..."<<name1<<endl;
	name=new char[strlen(name1)+1];
	if(name!=0)
	{
		strcpy(name,name1);
		score=score1;
	}
}
Student::~Student()
{
	cout<<"析构函数使用中..."<<name<<endl;
	name[0]='\0';
	delete []name;
}
int main()
{
	Student stu1("黎明",90);//调用构造函数
	Student stu2=stu1;//调用默认的拷贝构造函数
	return 0;
}

 

【例3.22】有关深拷贝的例子

//3.22有关深拷贝的例子
#include <iostream>
#include <string>
using namespace std;
class Student{
	public:
		Student(char *name1,float score1);
		Student(Student& stu);
		~Student();
	private:
		char *name;//学生姓名
		float score;//学生成绩
		
};
Student::Student(char *name1,float score1)
{
	cout<<"构造函数使用中..."<<name1<<endl;
	name=new char[strlen(name1)+1];
	if(name!=0)
	{
		strcpy(name,name1);
		score=score1;
	}
}
Student::Student(Student& stu)
{
	cout<<"拷贝构造函数使用中..."<<stu.name<<endl;
	name=new char[strlen(stu.name)+1];
	if(name!=0)
	{
		strcpy(name,stu.name);
		score=stu.score;
	}
}
Student::~Student()
{
	cout<<"析构函数使用中..."<<name<<endl;
	name[0]='\0';
	delete []name;
}
int main()
{
	Student stu1("黎明",90);//调用构造函数
	Student stu2=stu1;//调用默认的拷贝构造函数
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1357063.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能手机2024:狂卷“微创新”后如何突破新机遇

文 | 智能相对论 作者 | 楷楷 2023年&#xff0c;智能手机市场终于开始展露曙光。Counterpoint Research数据显示&#xff0c;2023年10月全球智能手机销量同比增长5%&#xff0c;智能手机市场出货量在经历了连续27个月的同比下滑后&#xff0c;首次出现同比正增长。 特别是在…

IDEA卡在”正在解析Maven依赖项“的解决方法

修改Maven镜像&#xff0c;修改Maven镜像为阿里云镜像 1.文件路径 C:\Program Files\JetBrains\IntelliJ IDEA 2022.2.3\plugins 2.因为我使用的是InteliJ idea 自带的Maven&#xff0c;所以直接去idea 插件安装目录&#xff0c;找到Maven插件&#xff0c;找到setting.xml 文…

Linux第4步_安装VMwareTools

安装Ubuntu操作系统后&#xff0c;就可以安装VMwareTools了&#xff0c;目的是实现“电脑和虚拟机之间互相复制粘贴文件”。 1、双击桌面图标“VMware Workstation Pro”&#xff0c;然后点击下图中的“开机”&#xff0c;打开虚拟机电源。 2、双击下图中的用户名“zgq” 3、…

Ubuntu上使用node搭建本地静态http服务器

1.搭建步骤 1.安装Node.js。首先确保你的Ubuntu系统已经安装了Node.js。如果没有安装&#xff0c;可以通过以下命令进行安装&#xff1a; sudo apt-get update sudo apt-get install nodejs #安装nodejs 2.安装npm。npm是Node.js的包管理器&#xff0c;一般会随着Node.js一…

面试算法90:环形房屋偷盗

题目 一条环形街道上有若干房屋。输入一个数组表示该条街道上的房屋内财产的数量。如果这条街道上相邻的两幢房屋被盗就会自动触发报警系统。请计算小偷在这条街道上最多能偷取的财产的数量。例如&#xff0c;街道上5家的财产用数组[2&#xff0c;3&#xff0c;4&#xff0c;5…

【Filament】加载obj和fbx模型

1 前言 3D 模型的常用格式主要有 obj、fbx、gltf 等&#xff0c;Filament 中的 filamesh.exe 工具可以将 obj、fbx 格式转换为 filamesh 格式&#xff0c;然后再加载显示。对于 gltf 格式模型&#xff0c;可以通过 ModelViewer 加载显示&#xff0c;这不在本文的讨论范围内。 1…

【Java基础篇】常见的字符编码、以及它们的区别

常见的字符编码、以及它们的区别 ✔️ 解析✔️扩展知识仓✔️Unicode和UTF-8有啥关系?✔️有了UTF-8&#xff0c;为什么要出现GBK✔️为什么会出现乱码 ✔️ 解析 就像电报只能发出 ”滴” 和 ”答” 声一样&#xff0c;计算机只认识 0 和 1 两种字符&#xff0c;但是&#x…

Python从入门到网络爬虫(函数详解)

前言 函数是变成语言中最常见的语法&#xff0c;函数的本质就是功能的封装。使用函数可以大大提高编程效率与程序的可读性。函数是能够实现特定功能的计算机代码而已&#xff0c;他是一种特定的代码组结构。 函数的作用 1.提升代码的重复利用率&#xff0c;避免重复开发相同代…

ssm基于vue框架和elementui组件的手机官网论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本手机官网就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&#x…

【UEFI基础】EDK网络框架(UNDI)

UNDI UNDI代码综述 UNDI全称Universal Network Driver Interface&#xff0c;它虽然属于UEFI网络框架的一部分&#xff0c;但是并没有在EDK开源代码中实现。不过目前主流网卡厂商都会提供UEFI下的网络驱动&#xff0c;并且大部分都实现了UNDI&#xff0c;这样BIOS下就可以通过…

鸿蒙APP上线注意事项

在将鸿蒙APP上线之前&#xff0c;开发者需要注意一些关键的事项&#xff0c;以确保应用的顺利发布和良好运营。以下是一些建议的注意事项&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.遵循应用市…

【常用排序算法】冒泡排序

冒泡排序 冒泡排序基本思想&#xff1a;N 个数的数组&#xff0c;经过N-1轮排序。 升序 大的值下沉&#xff0c;小的值上浮。降序 小的值下沉&#xff0c;小的字上浮 import java.util.Arrays; public class BubbleSort {public static void main(String[] args) {int[] values…

电脑视频需要分屏怎么做

在当今数字时代&#xff0c;人们对于视频的需求越来越高。有时候&#xff0c;我们可能想在同一屏幕上同时播放多个视频&#xff0c;进行对比、观看、剪辑或者其他目的。那么&#xff0c;视频分屏应该怎么做呢&#xff1f; 在本篇文章中&#xff0c;我们将会详细的为你介绍视频分…

Geotrust DV通配符证书保护域名数量

Geotrust是一家知名的SSL证书提供商&#xff0c;旗下有多种类型的SSL数字证书&#xff0c;保护网站数据在传输过程中的安全性和完整性&#xff0c;帮助用户确认其网站的安全。通配符SSL证书是Geotrust颁发的一种可以同时保护多个域名站点的SSL证书。今天就随SSL盾小编了解Geotr…

conda虚拟环境搭建和打包,删除,移动等全流程及相关问题汇总

私人笔记无偿分享&#xff0c;更多内容请访问&#xff1a;链接&#xff1a;https://pan.baidu.com/s/19mS5N9XJ_AotF20kUwSA3w?pwdp5kx 提取码&#xff1a;p5kx 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 4.4. anaconda虚拟环境搭建&#xff1a; 网址&am…

解决在test以外的目录下导入junit无效

以上引用来自src目录下的文件&#xff0c;可以看到&#xff0c;和junit有关的导入都飘红&#xff0c;但明明junit已经被正确导入进了项目中。 再看右侧的Maven的依赖下方&#xff0c;junit的右边有一个很不起眼的(test) 这是因为junit作为测试框架&#xff0c;可能包含仅适用于…

Halcon区域的面积和中心点area_center

Halcon区域的面积和中心点 提到区域的特征&#xff0c;最常用的莫过于区域的面积和中心点坐标信息。实际工作中&#xff0c;经常会使用面积或中心点进行特征的选择和定位。Halcon中的area_center算子就是用于实现这一功能的&#xff0c;该算子一次返回以下两个结果。 &#xf…

【KingbaseES】实现MySql函数WEEKS_BETWEEN

WEEKS_BETWEEN CREATE OR REPLACE FUNCTION weeks_between(start_date date, end_date date) RETURNS integer AS $$ BEGIN RETURN EXTRACT(WEEK FROM end_date) - EXTRACT(WEEK FROM start_date); END; $$ LANGUAGE plpgsql IMMUTABLE;结果展示

嵌入式Linux之MX6ULL裸机开发学习笔记(IMX启动方式-启动设备的选择)

一,硬件启动方式选择 1.启动方式的选择 6ull支持多种启动方式。 比如可以从 SD/EMMC、 NAND Flash、 QSPI Flash等启动。 6ull是怎么支持多种外置flash启动程序的。 1.启动方式选择&#xff1a; BOOT_MODE0 and BOOT_MODE1&#xff0c;这两个是两个IO来控制的&#xff0c;…

Unity 使用Sprite绘制一条自定义图片的线

Unity 使用Sprite绘制一条自定义图片的线 前言项目场景布置代码编写总结 运行效果感谢 前言 遇到一个需要绘制自定义形状的需求。那只能利用Sprite来绘制一条具有自定义图片的线&#xff0c;通过代码动态设置起点、终点以及线宽&#xff0c;实现灵活的线条效果。 项目 场景…