放假的时候学习了数据的封装,结果一个假期过去什么都不记得了,今天重新看了一遍,整理记录下来啦
至于为什么封装数据-.-菜猪不明白,但是就是觉得会减少很多bug!更严谨的东西基本都是更好哒吧~
首先先说类的实例化
我们定义一个这样的类
class TV
{
public:
char name[20];
int type;
void changVol();
void power();
};
从栈实例化对象
int main()
{
TV tv;
TV tv[20];
return 0;//系统自动释放申请的空间
}
从堆实例化对象
int main( )
{
TV *p=new TV();
TV *q=new TV[20];
if(p==NULL)
{
return 0;//申请内存失败,退出函数
}
if(q==NULL)
{
return 0;//申请内存失败,退出函数
}
delete p;
p=NULL;
delete []q;//养成习惯申请的空间在程序结束后释放,如果是指针数组,delete p只代表的销毁第一个空间
q=NULL;
return 0;
}
首先,其实用class直接写类,下面用的时候就用上面的引用的方式,ok的,但是这不符合面向对象的基本思想了,在后面也会有很多的问题,数据封装是一种更好的方式,能在自身的函数内对数据进行约束。
下面我会写一个完整的数据封装的函数
#include <iostream>
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;
}
int getSorce()
{
return m_iSorce;
}
void initSorce()
{
m_iSorce=0;
}
void study(int _sorce)
{
m_iSorce+=_sorce;
}//通过学习获得学分
private:
string m_strName;
string m_strGender;
int m_iSorce;
};
int main()
{
Student stu;
stu.initSorce();//为了数据的稳定数据开始都要初始化
stu.setName("zhuzhu");
stu.setGender("女");
stu.study(5);
stu.study(3);
cout << stu.getName()<<" "<<stu.getGender()<<" "<<stu.getSorce()<< endl;
return 0;
}
我的理解呢就是把数据都放在类里,实例化之后就实现了对对象的操作,把数据的处理写在程序里,实例化的时候通过调用这些函数来对数据进行操作