• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

Hánina Chata

为什么不问问神奇海螺呢?
  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

C++面向对象入门:实验二

一、实验目的

  1. 学习构造函数的重载、默认构造的使用;

  2. 了解析构函数的调用方法;

  3. 构造函数和析构函数调用的先后顺序;

  4. 掌握成员函数的具体实现方式。

二、实验内容

1. 利用构造函数对类的对象进行初始化实例

输入并编译程序,运行出结果,并解释每行程序的作用。

#include<iostream>
using namespace std;
class Line{
	public:
	Line(){
		cout<<"default constructor"<<endl;}
	Line(int x,int y,int xx,int yy){
		pointX=x;pointY=y;
		pointXX=xx;pointYY=yy;
		cout<<"构造了起点为("<<pointX<<","<<pointY<<")和终点为("<<pointXX<<","<<pointYY<<")的线段"<<endl;
	}
			Line(int xx,int yy);
private:
	int pointX;
	int pointY;
	int pointXX;
	int pointYY;

	};
	Line::Line(int xx,int yy){
		pointX=0;pointY=0;pointXX=xx;pointYY=yy;
		cout<<"构造了起点为("<<pointX<<","<<pointY<<")和终点为("<<pointXX<<","<<pointYY<<")的线段"<<endl;
	}
	int main(){
		Line line1;
		Line line2(2,3,9,5);
		Line line3(5,6);
		return 0;
	}

1.1 程序分析

	public:
	Line(){	默认构造函数
		cout<<"default constructor"<<endl;}
	Line(int x,int y,int xx,int yy){	含有四个参数的构造函数
		pointX=x;pointY=y;
		pointXX=xx;pointYY=yy;
		cout<<"构造了起点为("<<pointX<<","<<pointY<<")和终点为("<<pointXX<<","<<pointYY<<")的线段"<<endl;
	}
			Line(int xx,int yy);	声明含有两个参数的构造函数
private:
	int pointX;	定义起点x坐标
	int pointY;	定义起点y坐标
	int pointXX;	定义终点x坐标
	int pointYY;	定义终点y坐标

	};
	Line::Line(int xx,int yy){
		pointX=0;pointY=0;pointXX=xx;pointYY=yy;
		cout<<"构造了起点为("<<pointX<<","<<pointY<<")和终点为("<<pointXX<<","<<pointYY<<")的线段"<<endl;

1.2 运行结果

default constructor
构造了起点为(2,3)和终点为(9,5)的线段
构造了起点为(0,0)和终点为(5,6)的线段

2. 析构函数的使用实例

输入并编译程序,运行出结果,并解释每行程序的作用。

#include<iostream>
using namespace std;
class A{
private:
	int x,y;
public:
	A(int a,int b){x=a;y=b;cout<<"调用带参数的构造函数\n";}
	A(){x=0;y=0;cout<<"调用不带参数的构造函数\n";}
	~A(){cout<<x;cout<<"调用析构函数\n";}
	void Print(){cout<<x<<'\t'<<y<<endl;}
	};
	int main(){
		A a1;
		A a2(3,30);
		a1.Print();
		a2.Print();
		cout<<"退出主函数\n";
		return 0;
	}

2.1 程序分析

{
private:
	int x,y;	定义x和y
public:
	A(int a,int b){x=a;y=b;cout<<"调用带参数的构造函数\n";}	带参数的构造函数
	A(){x=0;y=0;cout<<"调用不带参数的构造函数\n";}	无参数的析构函数
	~A(){cout<<x;cout<<"调用析构函数\n";}	析构函数
	void Print(){cout<<x<<'\t'<<y<<endl;}	成员函数
	};
	int main(){
		A a1;	调用无参数构造函数
		A a2(3,30);	调用带参数的构造函数
		a1.Print();	输出a1数据
		a2.Print();	输出a2数据
		cout<<"退出主函数\n";
		return 0;	结束
}

2.2 运行结果

调用不带参数的构造函数
调用带参数的构造函数
0      0
3      30
退出主函数
3调用析构函数
0调用析构函数

3. 构造函数和析构函数的调用顺序分析实例

输入并编译程序,运行出结果,并解释每行程序的作用。

#include<iostream>
#include<string>
using namespace std;
class Student{
public:
	Student(int n,char nam[10],char s){
		num=n;
		strcpy(name,nam);
		sex=s;
		cout<<"Constructor called."<<endl;
	}
	~Student(){
		cout<<"Destructor called."<<num<<endl;}
	void display(){
		cout<<"num:"<<num<<endl;
		cout<<"name:"<<name<<endl;
		cout<<"sex:"<<sex<<endl<<endl;}
private:
	int num;
	char name[10];
	char sex;
};
int main(){
	Student stud1(10010,"Wang_li",'f');
	stud1.display();
	Student stud2(10011,"Zhang_fun",'m');
	stud2.display();
	return 0;
}

3.1 程序分析

class Student{
public:
	Student(int n,char nam[10],char s){		构造函数
		num=n;
		strcpy(name,nam);
		sex=s;
		cout<<"Constructor called."<<endl;
	}
	~Student(){	析构函数
		cout<<"Destructor called."<<num<<endl;}
	void display(){	显示学生信息
		cout<<"num:"<<num<<endl;	显示学号
		cout<<"name:"<<name<<endl;		显示姓名
		cout<<"sex:"<<sex<<endl<<endl;}	显示性别
private:
	int num;		定义整型变量,学号
	char name[10];	定义一个10个字符的数组,姓名
	char sex;	定义字符串,性别
};
int main(){
	Student stud1(10010,"Wang_li",'f');		创建第一个学生对象
	stud1.display();		显示第一个学生信息
	Student stud2(10011,"Zhang_fun",'m');	创建第二个学生对象
	stud2.display();		显示第二个学生信息
	return 0;	结束
}

3.2 运行结果

Constructor called.
num:10010
name:Wang_li
sex:f

Constructor called.
num:10011
name:Zhang_fun
sex:m

Destructor called.10011
Destructor called.10010

4. 程序设计

构造一个矩形类Rectangle,数据成员为矩形的左下角与右上角的坐标,并用成员函数实现对矩形周长与面积的计算。在main函数中测试。

4.1 源程序代码

#include<iostream>
using namespace std;
class Rectangle{
private:
	int x1,y1;
	int x2,y2;
public:
	Rectangle(int x,int y,int xx,int yy){
		if(x>xx){
			x1=xx;
			x2=x;
		}else{
			x1=x;
			x2=xx;}
		if(y>yy){
			y1=yy;
			y2=y;
		}else{
			y1=y;
			y2=yy;}
	}
	int Width() const{
		return x2-x1;}
	int Height() const{
		return y2-y1;}
	int C() const{
		return 2*(Width()+Height());}
	int S() const{
		return Width()*Height();}
	void display() const{
		cout<<"起点("<<x1<<","<<y1<<"),终点("<<x2<<","<<y2<<")"<<endl;
		cout<<"宽:"<<Width()<<"高:"<<Height()<<endl;
		cout<<"周长:"<<C()<<endl;
		cout<<"面积:"<<S()<<endl;}
};
int main(){
	cout<<"示例"<<endl;
	Rectangle rect(0,0,3,4);
	rect.display();
	return 0;
}

4.2 程序分析

构造Rectangle,先分别定义一个左下角坐标和右上角坐标,左下角具体表示为(x1,y1)、右上角(x2,y2)。再通过if条件判断大小,确定位置:因为左下角坐标的x和y应小于右上角。再定义并计算矩形的宽和高,并将宽高分别代入矩形的周长和面积公式。在两个坐标都确定后在主函数中输出该矩形的两点坐标、宽高、周长和面积结果。

三、实验总结

通过实验掌握构造函数的重载和析构函数的使用规则,注意这两个函数的调用顺序规律,理解成员函数如何实现,了解类封装的概念。

By @哈娜Official(HanaNováčková:https://www.cnblogs.com/hanina-chata/p/19547957)

posted on 2026-01-29 13:35  HanaNováčková  阅读(3)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3