IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++课程学习-实验5 -> 正文阅读

[C++知识库]C++课程学习-实验5

实验目的:

  1. 进一步加深对类和对象的理解
  2. 掌握几种对象传递的使用方法
  3. 掌握静态成员的概念和使用

学习内容(a):

了解三种不同的对象传递方式,分别为:

1.使用对象作为函数参数

class Tr {
public:
Tr(int n)
{
	i = n;
}
void set_i(int n)
{
	i = n;
}
int get_i()
{
	return i;
}
private:
	int i;
};
void sqr_it(Tr ob)
{
	ob.set_i(ob.get_i() * ob.get_i());
	cout << "在函数sqr_it内,形参ob的数据成员i的值为:" << ob.get_i();
	cout << endl;
}
int main()
{
	Tr obj(10);
	//Tr* obj_1();
	cout << "调用函数sqr_it前,实参对象obj的数据成员i的值为:" << obj.get_i() << endl;
	sqr_it(obj);//在使用对象指针作为函数参数时,需要将此语句改为:sqr_it(obj);因为,此时实参为对象obj的地址
	cout << "调用函数sqr_it后,实参对象obj的数据成员i的值为:" << obj.get_i() << endl;
	return 0;
}

在这里插入图片描述

2.使用对象指针作为函数参数

class Tr {
public:
Tr(int n)
{
	i = n;
}
void set_i(int n)
{
	i = n;
}
int get_i()
{
	return i;
}
private:
	int i;
};
void sqr_it(Tr* ob)
{
	ob->set_i(ob->get_i() * ob->get_i());
	cout << "在函数sqr_it内,形参ob的数据成员i的值为:" << ob->get_i();
	cout << endl;
}
int main()
{
	Tr obj(10);
	//Tr* obj(10);
	cout << "调用函数sqr_it前,实参对象obj的数据成员i的值为:" << obj.get_i() << endl;
	sqr_it(&obj);//在使用对象指针作为函数参数时,需要将此语句改为:sqr_it(&obj);因为,此时实参为对象obj的地址
	cout << "调用函数sqr_it后,实参对象obj的数据成员i的值为:" << obj.get_i() << endl;
	return 0;
}

在这里插入图片描述

3.使用对象引用作为函数参数

class Tr {
public:
Tr(int n)
{
	i = n;
}
void set_i(int n)
{
	i = n;
}
int get_i()
{
	return i;
}
private:
	int i;
};
void sqr_it(Tr& ob)
{
	ob.set_i(ob.get_i() * ob.get_i());
	cout << "在函数sqr_it内,形参ob的数据成员i的值为:" << ob.get_i();
	cout << endl;
}
int main()
{
	Tr obj(10);
	//Tr* obj(10);
	cout << "调用函数sqr_it前,实参对象obj的数据成员i的值为:" << obj.get_i() << endl;
	sqr_it(obj);//在使用对象指针作为函数参数时,需要将此语句改为:sqr_it(&obj);因为,此时实参为对象obj的地址
	cout << "调用函数sqr_it后,实参对象obj的数据成员i的值为:" << obj.get_i() << endl;
	return 0;
}

在这里插入图片描述
分析总结:
1.在向函数传递对象时,是通过“传值调用”传递函数的,只由实参传给形参,而不能由形参传回来给实参,函数中对对象的修改不影响该对象实参的值;
2.形参对象指针所指对象的值的改变影响着实参对象的值;
3.使用对象的引用作为形参也能改变对象的实参的值,而且方法比使用指针更加简单;

实验内容(b)

  1. 掌握静态成员的概念和使用;
  2. 由关键字static修饰说明的成员,称为静态成员;
  3. 静态成员为所有对象共享,只有一份存于公共内存中;
  4. 静态成员包括静态数据成员和静态函数成员;

代码:

class Ctext {
	static int count;//私有成员,静态数据成员的定义与普通数据成员类似,但是前边要加上static关键词
public:
	Ctext()
	{
		++count;
		cout << "对象数量=" << count << '\n';
	}
};
int Ctext::count = 0;//静态数据成员的初始化应在类外单独进行,而且应该在定义对象之前进行
int main(void)
{
	Ctext a[3];
	return 0;
}

在这里插入图片描述

实验内容(c)

实验要求:

1.创建一个TStudent类,完成以下功能:
2.该类包括三个函数: InitStudent、 ExpendMoney和ShowMoney;
3.采用float m_ ClassMoney变量作为静态变量,用于存储班级的班费, 初始值设为1000;
4.InitStudent (char name)主要负责完成学生姓名的初始化;
5.ExpendMoney(float money)主要完成班费的花销计算;
6.ShowMoney()主要完成班费余额显示;
7.主程序中分别定义A、B、C三个学生,每个学生为一个对象,每个学生分别消费班费50,98.5,500.53,最后显示班费的余额。

代码(方法1-直接在主函数赋予函数参数):

class TStudent {
private:
	float spent_money;
	//char name[10];
	static float m_ClassMoney;
public:
	TStudent();//定义构造函数
	void InitStudent(char name);
	void ExpendMoney(float money);
	void ShowMoney();
};

float TStudent::m_ClassMoney = 1000;

TStudent::TStudent()
{
}
void TStudent::InitStudent(char name)
{
}
void TStudent::ExpendMoney(float money)
{
	m_ClassMoney = m_ClassMoney - money;
}
void TStudent::ShowMoney()
{
	cout << "班费剩余金额为:" << m_ClassMoney << endl;
}
int main()
{
	TStudent a, b, c;
	a.InitStudent('a');
	a.ExpendMoney(50);
	a.ShowMoney();
	b.InitStudent('b');
	b.ExpendMoney(98.5);
	b.ShowMoney();
	c.InitStudent('c');
	c.ExpendMoney(500.53);
	c.ShowMoney();
	return 0;
}

在这里插入图片描述

代码(方法2-使用对象引用作为函数参数):

class TStudent{
private:
    float spent_money;
	char name[10];
	static float m_ClassMoney;
public:
	TStudent(float money);//定义构造函数
	void InitStudent(TStudent& obj);
    void ExpendMoney(TStudent& obj);
    void ShowMoney();
};

float TStudent::m_ClassMoney = 1000;

TStudent::TStudent(float money)
{
	spent_money = money;
}
void TStudent::InitStudent(TStudent& obj)
{
	cout << "请输入该消费者的姓名:";
	cin >> obj.name;
	cout << obj.name << "消费了" << obj.spent_money << endl;
}
void TStudent::ExpendMoney(TStudent& obj)
{
	m_ClassMoney = m_ClassMoney - obj.spent_money;
}
void TStudent::ShowMoney()
{
	cout << "班费剩余金额为:" << m_ClassMoney << endl;
}
int main()
{
	TStudent a(50), b(98.5), c(500.53);
	a.InitStudent(a);
	a.ExpendMoney(a);
	a.ShowMoney();
	b.InitStudent(b);
	b.ExpendMoney(b);
	b.ShowMoney();
	c.InitStudent(c);
	c.ExpendMoney(c);
	c.ShowMoney();
	return 0;
}

在这里插入图片描述

出现的问题:

在这里插入图片描述
因为m_ClassMoney是静态变量,而spend_money是非静态变量,所以无法进行如此运算。
后改成上面程序段中的形式,使用对象引用得已解决。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-28 11:05:10  更:2021-11-28 11:07:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:40:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码