C++第三次上机实验总结(掌握声明类和定义对象的方法)

上机目的:

①.理解类和对象的概念,掌握声明类和定义对象的方法。

②.掌握构造函数和析构函数的实现方法。

③.初步掌握使用类和对象编制C++程序

基本任务:

        创建一个类,完成以下功能:

①.连续输入一组二位坐标值;

②.二维坐标值的数目可以由用户自定义(默认为2个,最多为100个);

③.显示用户输入的坐标值;

④.显示用户输入坐标值的均值;

程序代码:

.h 文件:

#include<iostream>
using namespace std; 

.cpp文件:

#include "homework3.h"

class Coordinate {
public:
	Coordinate()
	{
	times = 2; //设置默认输入坐标数目
		cout << "构造函数1被调用。" << endl;
	}
	Coordinate(int times1)
	{
	 times = times1;
		cout << "构造函数2被调用,坐标数为:" << times << endl;
	}
	~Coordinate()
	{
		cout << "析构函数被调用" << endl;
	}
	void InputCoord()
	{
		int i;
		for (i = 0; i < times; i++)
		{
			cout << "请输入第" << i + 1 << "个坐标的横坐标:" << endl;
			cin >> Coord[i][0];
		}

		for (i = 0; i < times; i++)
		{
			cout << "请输入第" << i + 1 << "个坐标的纵坐标:" << endl;
			cin >> Coord[i][1];
		}
	}
	void ShowCoord()
	{
		int i;
		for (i = 0; i < times; i++)
		{
			cout << "第" << i + 1 << "个坐标为" << Coord[i][0] << ',' << Coord[i][1] << endl;
		}
	}
	void ShowAvgCoord()
	{
		int i;
		float avgx, avgy, sumx = 0, sumy = 0;
		for (i = 0; i < times; i++)
		{
			sumx = sumx + Coord[i][0];
			sumy = sumy + Coord[i][1];
		}
		avgx = sumx / times;
		avgy = sumy / times;
		cout << "横坐标平均值为:" << avgx << endl;
		cout << "纵坐标平均值为:" << avgy << endl;
	}
private:
	float Coord[100][100];
	int times;
};
int main()
{
	int num;
	cout << "是否需要改变输入坐标数目(默认值为2,最多可以为100个)?需要改变请按1,无需改变请按0:";
	cin >> num;
	if (num == 1)
	{
		int coordinate_numebr;
		cout << "请输入要更改的坐标数目:" ;
		cin >> coordinate_numebr;
		Coordinate x(coordinate_numebr);
		x.InputCoord();
		x.ShowCoord();
		x.ShowAvgCoord();
		return 0;
	}
	if (num == 0)
	{
		Coordinate x;
		x.InputCoord();
		x.ShowCoord();
		x.ShowAvgCoord();
		return 0;
	}
}

Debug过程中遇到的问题及解决方法:

  1. 在Debug过程中,想要在main函数中通过输入坐标数目num来产生分支,定义定义对象时调用不同的构建函数来确定是默认的2还是其他的坐标数,但编译后报错,“x”未声明标识符,查了相关资料仍然没有解决这个问题。

      2.相同的代码,第一天调试时没有这三个警告,但是第二天调试的时候出现了这三个警告,这三个警告原因如下:前两个是因为没有初始化数组,第三个是因为数组创建的太大了。但是相同的代码只是因为天数不同而产生了不同的结果,这是为什么呢?

 程序运行结果:

使用默认值时:

 用户自己设置输入坐标值时(以8为例):

实验总结 :

       本次实验掌握了构造函数的实现方法,掌握了类中的三种限定符 public,private,protected,private、protected类的成员不能从类外直接访问,只能被本类中的其他成员函数调用;public类的成员既可以被本类的成员函数调用也可以在类外被该类的对象访问。本程序中Coordinate函数为public型,所以可以在类外访问。参考文章:类与对象的概念

       类的声明是由结构体的声明发展而来的,结构体中只包含数据,不包含操作,而类中既有数据又有操作,并且一般不把类中的全部成员与外界隔离,一般是把数据隐蔽起来,而把成员函数作为对外界的接口。

       声明一个类的方法为:

class Car //以class开头,表示声明一个类,名为Car

{    

    float weight;  

    char name[20];  

    int price;//以上3行是数据成员,类中的成员默认情况下为私有的    

    public:
    void display( ) //成员函数    

    {      

           cout<<″car_weight:″<<weight<<endl;      

           cout<<″car_name:″<<name<<endl;      

          cout<<″car_price:″<<price<<endl;       //以上4行是函数中的操作

      }    

};

Car car1,car2;//定义了两个Car类的对象car1和car2

 定义对象有三种方法:

1.先声明类类型,然后再定义对象:上面的例子就是这种方法。

2.在声明类类型的同时定义对象:

class Car //以class开头,表示声明一个类,名为Car

{    

    float weight;  

    char name[20];  

    int price;//以上3行是数据成员,类中的成员默认情况下为私有的    

    public:
    void display( ) //成员函数    

    {      

           cout<<″car_weight:″<<weight<<endl;      

           cout<<″car_name:″<<name<<endl;      

          cout<<″car_price:″<<price<<endl;       //以上4行是函数中的操作

      }    

} car1,car2;

3.不出现类名,直接定义对象:

class  //以class开头,表示声明一个类

{    

    float weight;  

    char name[20];  

    int price;//以上3行是数据成员,类中的成员默认情况下为私有的    

    public:
    void display( ) //成员函数    

    {      

           cout<<″car_weight:″<<weight<<endl;      

           cout<<″car_name:″<<name<<endl;      

          cout<<″car_price:″<<price<<endl;       //以上4行是函数中的操作

      }    

} car1,car2;

该程序定义了两个无类名的类对象 直接定义对象,在C++中是合法的、允许的,但却很少用,也不提倡用, 一般情况第一种方式用的比较多。参考文章:C++类的声明和对象的定义

       心得体会:本次实验在完成基本任务的基础上增加了用户可以自行输入坐标的数目,但是编程中出现的问题也成功解决,但是出现问题的原因还不是很清楚,而且为什么不同时间程序编译有时没有警告有时有警告,这种情况的原因也不是很清楚,问题都解决了,但是出现问题的原因不是特别明确。

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
C++上机实验报告-实验三全文共13页,当前为第1页。C++上机实验报告-实验三全文共13页,当前为第1页。实验三类与对象 C++上机实验报告-实验三全文共13页,当前为第1页。 C++上机实验报告-实验三全文共13页,当前为第1页。 实验目的 1.掌握类的定义和使用 2.掌握类的定义对象声明 3.复习具有不同访问属性的成员的访问方式 4.观察构造函数和析构函数的执行过程 5.学习类的组合使用方法 6.使用VC++的debug调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。 2.实验要求 1.定义一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。其中,rank为枚举类型CPU_Rank,定义为enum CPU_Rank{P1=1,P2,P3,P4,P5,P6,P7},frequency为单位是MHz的整型数,voltage为浮点型的电压值。观察构造函数和析构函数的调用顺序。 2.定义一个简单的Computer类,有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,有两个公有成员函数run、stop。cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象定义并实现这个类。 3. (选做)设计一个用于人事管理的People(人员)类。考虑到通用性这里只抽象出所有类型人员都具有的属性:number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。其中"出生日期"定义为一个"日期"类内嵌子对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、组合。 3.实验内容 1.首先定义枚举类型CPU_Rank,例如enum CPU_Rank{P1=1, P2, P3, P4, P5, P6, P7},再定义CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等私有数据成员,定义成员函数run、stop,用来输出提示信息,在构造函数和析构函数中也可以输出提示信息。在主程序中定义一个CPU的对象,调用其成员函数,观察类对象的构造与析构顺序,以及成员函数的调用。程序名:lab4_1.cpp 2.使用debug调试功能观察程序lab4_1.cpp的运行流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。 3.调试操作步骤如下: 1)单击Build " Start Debug " Step Into命令,或按下快捷键F11,系统进入单步执行状态,程序开始运行,一个DOS窗口出现,此时Visual Studio 中光标停在main()函数的入口处; 2)从Debug菜单或Debug工具栏中单击Step Over,此时,光标下移,程序准备执行CPU对象的初始化; 3)单击Step Into,程序准备执行CPU类的构造函数; 4)连续单击Step Over,观察构造函数; C++上机实验报告-实验三全文共13页,当前为第2页。C++上机实验报告-实验三全文共13页,当前为第2页。5)此时程序准备执行CPU对象的run()函数,单击Step Into,程序进入run()成员函数,连续单击Step Over,直到回到main()函数。 C++上机实验报告-实验三全文共13页,当前为第2页。 C++上机实验报告-实验三全文共13页,当前为第2页。 6)继续执行程序,参照上述的方法,观察程序的执行顺序,加深对类的构造函数、析构函数、成员函数的执行顺序的认识。 7)再试试Debug菜单栏中别的菜单项,熟悉Debug的各种方法。 4.首先定义CPU类(可使用第二题中的CPU类)、RAM类、CDROM类。再定义Computer类;定义私有数据成员cpu、ram、cdrom,定义公有成员函数run、stop,可在其中输出提示信息。在主程序中定义一个Computer的对象,调用其成员函数,观察类对象及其成员变量的构造与析构顺序,以及成员函数的调用。程序名:lab4_2.cpp. 使用debug调试功能观察lab4_2.cpp程序的运行流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序,特别注意观察成员变量的构造与析构顺序。 4.思考题: 1.如何定义一个类? class 类名称 { public: 外部接口 protected: 保护型成员 private: 私有成员 }; 2.如何定义类的构造函数和析构函数? class 类名称 { public: 类名(形参表);//构造函数声明 类名(类名& 对象名);//拷贝构造函数声明 ~类名();//析构函数声明 …… }; 类名::类名(形参表)//构造
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值