C++学习笔记(第八章 类和对象 初识对象 之一)

这篇学习笔记介绍了C++中的类和对象概念,通过分析面向对象程序的结构,阐述了如何定义和使用对象。文章以旱冰场造价问题为例,展示了如何利用类来计算圆形旱冰场的总造价,并提出了时间类的功能扩展练习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【题目 1-掌握有对象的程序结构】

阅读第一个面向对象的程序,程序结构是所有成员函数都在类内定义,认识对象和类,并知道对象和类怎么定义。

#include <iostream>
#include <cstring>
using namespace std;
class Student
{
private:
    int num;
    char name[20];
    char sex;
public:
    void set_data(int n, char *p,char s)
    {
        num=n;
        strcpy(name,p);
        sex=s;
    }
    void display( )
    {
        cout<<"num: "<<num<<endl;
        cout<<"name: " <<name<<endl;
        cout<<"sex: " <<sex<<endl;
    }
};
int main()
{
    Student stud1,stud2; 		 
    stud1.set_data(1,"He",'f');  
    stud2.set_data(2,"She",'m'); 
    stud1.display();			   
    stud2.display();			   
    return 0;
}

【题目2 - 旱冰场造价】一个圆形的旱冰场地,场地内抹水泥,造价为每平方米M元,围栏用木条围成,每米造价N元,输入旱冰场半径,用程序计算出其造价。


    提示:设计一个Circle(圆)类,数据成员为圆的半径,Circle类还提供计算圆的面积和边长的成员函数。在main函数中,定义一个Circle类的对象,调用成员函数求出旱冰场的造价。
    请在下面提示的基础上完成程序,其中需要做的工作包括:(1)在类声明中声明相关的公共成员函数;(2)在类声明和main()函数之间,定义声明的成员函数。

const int M=20;   //水泥场地每平米造价
const int N=35;   //围栏每米造价
class Circle
{
//下面声明需要的成员函数(从已经提供的main函数中可以找出需要哪些成员函数)


private:
double radius;
};
//下面定义需要的成员函数


int main()
{
	double r;
	cout<<"请输入旱冰场的半径: ";
	cin>>r;
	Circle c;
	c.setRadius(r);
	cout<<"旱冰场的造价为 "<<M*c.area()+N*c.circumference()<<" 元。"<<endl;
	return 0;
}



【题目3 - 时间类】阅读、运行程序后,按要求增加类的功能

#include <iostream>
using namespace std;
class Time
{
public:
	void set_time( );   
	void show_time( );  
private: 
	bool is_time(int, int, int);   //这个成员函数设置为私有的,是合适的,请品味
	int hour;
	int minute;
	int sec;
};
void Time::set_time( ) 
{
	char c1,c2;
	cout<<"请输入时间(格式hh:mm:ss)";
	while(1)
	{	cin>>hour>>c1>>minute>>c2>>sec;
		if(c1!=':'||c2!=':')
			cout<<"格式不正确,请重新输入"<<endl;
		else if (!is_time(hour,minute,sec))
			cout<<"时间非法,请重新输入"<<endl;
		else 
			break;
	}
}
void Time::show_time( )      
{
	cout<<hour<<":"<<minute<<":"<<sec<<endl;
}
bool Time::is_time(int h,int m, int s)
{
	if (h<0 ||h>24 || m<0 ||m>60 || s<0 ||s>60)
		return false;
	return true;
}
int main( )
{
	Time t1;  
	t1.set_time( );   
	T1.show_time( );
	return 0;
}
要求:请在原类基础上,增加下列成员函数,要求前三个在类内定义(将是内置成员函数),后三个在类内声明,类外定义。在main()数中增加适当的调用以展示扩充类定义后的功能。
add_a_sec()  //增加1秒钟
add_a_minute() //增加1分钟
add_an_hour() //增加1小时
add_seconds(int) //增加n秒钟
add_minutes(int) //增加n分钟
add_hours(int) //增加n小时
提示:(1)要考虑增加后超出取值范围的情形;(2)增加n秒后,秒数可能会超过60,调整秒数,并可以调用增加分钟数的成员函数,使时间合法;同理,增加分钟数也有类似问题。
【题目3扩展(自选)】是否可以设计一个DateTime类了?实施一下吧。


【题目4 - 长方柱类】仿照你阅读过的程序,编写基于对象的程序,求3个长方柱(Bulk)的体积。数据成员包括长(length)、宽(width)、高(heigth)、体积,要求设计成员函数实现下面的功能:
(1)由键盘输入3个长方柱的长、宽、高;
(2)计算长方柱的体积(volume)和表面积(areas);
(3)输出这3个长方柱的体积和表面积;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值