初始封装
来源:互联网 发布:linux echo 编辑:程序博客网 时间:2024/06/05 14:53
----------------siwuxie095
数据的封装
以学生为例定义一个类:
有两个数据成员:一个string 型的姓名,一个 int 型的年龄
通过对象直接访问数据成员的用法是有问题的,违背了面向对象的指导思想
面向对象的基本思想
面向对象的基本思想就是以对象为中心,具体来说就是要以谁做什么来表达程序的逻辑
体现到代码层面就是将所有的数据操作转化为成员函数的调用
换句话说,对象在程序中的所有行为,都通过调用自己的函数来完成
如:通过函数来封装数据成员
数据成员定义在private 下边,这里以 age 为例在 public 中定义两个成员函数
直接用数据成员赋值的方法,虽然方便,但弊端很多,如:出现非法赋值
而数据封装虽然看上去比较麻烦,但好处非常多,如:通过 数据封装 便能
很好的解决像上面的非法赋值问题
只需将 setAge() 略作改变,就能对传入进来的参数起到条件限制的作用
此外,对于有些数据成员来说,只希望这些数据被外界读取,而不希望被外界改变
即只能读不能写
以 汽车 为例定义一个类:
private 下边的数据成员代表汽车轮子的个数
对于汽车轮子的个数,不希望外界通过某一个函数去改变它的值,而只能读取它的值
「只能读取不能写入的属性即只读属性」
程序 1:
#include <stdlib.h>
#include<iostream>
#include <string>
using namespace std;
/**********************************************************/
/*数据的封装
定义一个Student类,含有如下信息:
1.姓名:name
2.性别:gender
3.学分(只读):score
4.学习:study(学习可以增加学分)*/
/**********************************************************/
class Student
{
//一般将 public 写在前边,private写在后边
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;
}
int getScore()
{
return m_iScore;
}
void initScore()//初始化学分
{
m_iScore =0;
}
void study(int _score)
{
m_iScore += _score;
}
private:
//数据成员的命名要求:m+下划线+数据类型+名字
//命名的好处:每次看到它就知道它是定义在类中的数据成员
string m_strName;
string m_strGender;
int m_iScore;
};
int main(void)
{
Student stu;
stu.initScore();//如果不初始化则会失控(值不确定)
stu.setName("Marry");
stu.setGender("女");
stu.study(5);//先修了5个学分
stu.study(3);//再修了3个学分
cout << stu.getName() <<" " << stu.getGender() << " " << stu.getScore() << endl;
system("pause");
return0;
}
程序 2:
#include<stdlib.h>
#include <iostream>
#include <string>
using namespace std;
/**
*定义类:Student
*数据成员:m_strName
*数据成员的封装函数:setName()、getName()
*/
class Student
{
public:
//定义数据成员封装函数setName()
void setName(string name)
{
m_strName = name;
}
//定义数据成员封装函数getName()
string getName()
{
return m_strName;
}
private:
//定义Student类私有数据成员m_strName
string m_strName;
};
int main()
{
//使用new关键字,实例化对象(在堆中实例化对象)
//也可以 Student *stu = new Student; 去掉括号
Student *stu =new Student();
if (NULL==stu)
{
system("pause");
return0;
}
//设置对象的数据成员
stu->setName("siwuxie095");
//使用cout打印对象str的数据成员
cout << stu->getName() << endl;
//将对象str的内存释放,并将其置空
delete stu;
stu = NULL;
system("pause");
return0;
}
【made by siwuxie095】
- 初始封装
- C++属性封装之初始封装
- 初始python 类的继承与封装
- 初始
- 初始
- 初始
- 初始
- 初始
- 初始
- 初始
- 初始
- 初始
- 初始
- 初始Mapr(六)——Mapr库和封装库
- java入门学习(6)—封装,继承,多态,this,super,初始代码块
- chart初始
- 初始状态
- linux初始
- 关于汉化版adobe after effects cs6 中:“afterEffects警告:未知工作区”和“浮动窗口恢复”的讲解
- Android--ContentProvider小demo
- C++数组指针和指针数组
- 【洛谷】3381 【模板】最小费用最大流
- ZOJ-3953 Intervals,t
- 初始封装
- 数学 找规律HDU-1030
- 遍历文件夹内的所有文件
- IBM Lotus Domino Designer 下载安装记录
- QT6
- MySQL数据库引擎介绍、区别、创建和性能测试的深入分析
- C++创建类
- C语言实现循环队列
- 【Unity3D】SetActive的NullReferenceException与LoadLevel的初始化