C++学习笔记(9):数据的封装

本文深入探讨面向对象编程的核心思想,强调以对象为中心的设计理念。通过具体示例讲解封装的好处,展示如何使用get和set方法保护数据成员,实现学生类的实例化与操作。

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

注:转载请标明原文出处链接: https://lvxiaowen.blog.youkuaiyun.com/article/details/107237750

1 面向对象的思想

在这里插入图片描述
上图的写法违背了面向对象的基本思想。

面向对象核心思想:以对象为中心,即以“谁做什么”来表达程序的逻辑。体现到代码层面:将所有的数据操作转化为成员函数的调用,即对象在程序中的所有行为都通过调用自己的函数来完成,如下图所示:
在这里插入图片描述

2 封装的好处

在这里插入图片描述
如上图所示,年龄一般不可能超过1000。在输入的时候,需要有一个逻辑判断,对传入的参数进行的条件限定,如下图所示:

在这里插入图片描述
封装可以对传入的参数起到条件限定的作用。

3 示例

题目描述:
  定义一个Student类,包含姓名、性别、学分(只读)、学习,使用get和set函数封装数据成员。在main函数中分别通过栈和堆实例化对象,并打印其相关函数。

#include<iostream>
#include<stdlib.h>
#include<string>
using namespace std;

class Student
{
public:
	void setName(string name)
	{
		m_strName = name;
	}
	string getName()
	{
		return m_strName;
	}

	void setGender(string _gender)
	{
		m_strGender = _gender;
	}
	string getGender()
	{
		return m_strGender;
	}

	void initScore()
	{
		m_iScore = 0;
	}
	void study(int _score)
	{
		m_iScore += _score;
	}
	int getScore()
	{
		return m_iScore;
	}

private:
	string m_strName;
	string m_strGender;
	int m_iScore;
};

int main()
{
	cout << "姓名" << " " << "年龄" << " " << "总成绩" << endl;

	//从栈上实例化对象
	Student stu1;
	stu1.initScore();
	stu1.setName("张三");
	stu1.setGender("男");
	stu1.study(80);
	stu1.study(90);
	cout << stu1.getName() << " " << stu1.getGender() << "   " << stu1.getScore() << endl;

	//从堆上实例化对象
	Student *stu2 = new Student();
	if (NULL == stu2)
		return 0;
	stu2->initScore();
	stu2->setName("李四");
	stu2->setGender("女");
	stu2->study(90);
	stu2->study(100);
	cout << stu2->getName() << " " << stu2->getGender() << "   " << stu2->getScore() << endl;

	delete stu2;
	stu2 = NULL;
	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述

参考资料

[1] https://www.imooc.com/learn/381

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值