在一片苍茫的草地上生活着一群无忧无虑的小猪,他们有着粉粉嫩嫩或者黑不溜秋的皮肤、圆圆的鼻孔、大大的耳朵,非常惹人喜爱。定睛一看,有的猪正在舒适的窝里睡觉,有的正在夕阳下奔跑(国产的猪就是勤快),有的正为猪生大事而在谈恋爱。。。那么问题来了,这跟类和对象有什么关系呢?对,你可能猜到了,我们将这群小猪抽象成为猪类,而每只可爱滴猪则是猪类实例化的对象。好,那么我们如何使用C++来进行抽象呢?我们接着往下看。
我们可以使用class关键字来抽象一个类,比如:
class Pig
{
}; //注意后面的分号不能丢
这样我们就简单的声明了一个类,可是花括号里空空的,这跟咸鱼有什么区别呢?别急,我们把刚才观察到的一一列举上。每只小猪都有体重、性别、肉质情况等等,不过根据我们所侧重的方面,只取前三者就够了。
class Pig
{
public:
string m_strName; //名字
char m_cSex; //性别
double m_dWeight; //体重
}; //注意后面的分号不能丢
可是小猪们还会睡觉的啊,还会奔跑的啊。别急,我们再为其添加相应的方法(函数)。
class Pig
{
public:
string m_strName; //名字
char m_cSex; //性别
double m_dWeight; //体重
void run(); //奔跑
void sleep(); //睡觉
}; //注意后面的分号不能丢
这样一来,我们所需要的都齐了,可是我们如何去定义这一只只活泼可爱的小猪呢。突然,天空一声巨响,一道闪电从天而降,西边的山崖裂开了一道巨缝,一只肥头大耳的小猪蹦了出来,好,那么我们就来(强行)实例化这只新伙伴吧。
首先我们先给他取一个响亮的名字,就叫猪刚烈吧,谁让你是上帝呢o(∩_∩)o
Pig pig;
pig.m_strName = "zhugangile";
这样猪刚烈就诞生了,但是我们还要赋给他体重性别什么的啊,你可能会机智的这么写:
pig.m_cSex = 'M';
pig.m_dWeight = 250.00;
这么写在语法上是可以的,但是不符合我们面向对象的封装性,你想啊,当我们想知道人家的体重的时候需要询问人家吧,可不能直接打量出来的。所以我们需要使用相应的方法(接口)来获得相应的数据,同时使用访问限定符private将必要的数据成员封装起来,就像这样:
class Pig
{
public:
void run(); //奔跑
void sleep(); //睡觉
void setName(string name); //设定姓名
void setWeight(); //设定体重
void setSex(); //设定性别
double getWeight(); //获取体重
char getSex(); //获取性别
private:
string m_strName; //名字
char m_cSex; //性别
double m_dWeight; //体重
}; //注意后面的分号不能丢
注意我们使用了privat之后就不能在类外直接访问成员了啊!
既然都已经定义好了,我们来使用一下这些方法吧。
pig.setName("zhuganglie");
pig.setWeight(250.00);
pig.setSex('M');
cout << "Weight:" << pig.getWeight() << endl;
cout << "Sex:" << pig.getSex() << endl;
pig.run();
pig.sleep();
源程序代码:
#include <iostream>
using namespace std;
class Pig
{
public:
void run(); //奔跑
void sleep(); //睡觉
void setName(string name); //设定性别
void setWeight(double weight); //设定体重
void setSex(char sex); //设定性别
double getWeight(); //获取体重
char getSex(); //获取性别
private:
string m_strName; //名字
char m_cSex; //性别
double m_dWeight; //体重
}; //注意后面的分号不能丢
int main(void)
{
Pig pig; //在栈上实例化一个对象
pig.setName("zhuganglie");
pig.setWeight(250.00);
pig.setSex('M');
cout << "Weight:" << pig.getWeight() << endl;
cout << "Sex:" << pig.getSex() << endl;
pig.run();
pig.sleep();
return 0;
}
void Pig::run()
{
cout << "I can run!" << endl;
}
void Pig::sleep()
{
cout << "I can sleep!" << endl;
}
void Pig::setWeight(double weight)
{
m_dWeight = weight;
}
void Pig::setSex(char sex)
{
m_cSex = sex;
}
double Pig::getWeight()
{
return m_dWeight;
}
char Pig::getSex()
{
return m_cSex;
}
void Pig::setName(string name)
{
m_strName = name;
}
最后说一下C++中的命名问题,我比较常用的是类名首字母大写,比如:Person;方法(函数)名首字母小写后面的单词首字母大写,比如getName(),(也有使用get_name()之类的。。);变量名字的话,由于C++变量的作用域不同,对于全局、普通变量均使用小写字母,比如name、sex,对于数据成员变量我习惯使用的是数据成员标记m(member)下划线、数据类型、名字,比如m_strName。