C++面向对象入门:实验二
一、实验目的
-
学习构造函数的重载、默认构造的使用;
-
了解析构函数的调用方法;
-
构造函数和析构函数调用的先后顺序;
-
掌握成员函数的具体实现方式。
二、实验内容
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) 收藏 举报
浙公网安备 33010602011771号