面向对象

“::”域运算符。
面向对象程序语言的主要特征:
抽象、封装、继承、多态。

抽象:
     面向对象思想要求程序员将程序的每一部分都看作一个抽象的对象,即程序是由一组抽象的对象组成,更复杂点,这些对象根据他们相同的特征而进一步组成了一个类。比如:
     小明是一个人,我们把他看做一个对象,小红也是一个人,我们也把她看做一个对象,还有其父母等,他们都是一个个具体的对象,但我们可以发现他们都具备几个共有的特征,那就是能够行走,说话,吃饭等。我们就可以把他们归纳在一起,并抽象的看做一个类——人类。 

封装:
    早期的软件由于数据和程序混在一起,导致程序可读性很差,而且修改起来很困难。许多数据都混在一起,而这些数据又被很多个模块互相调用,因此某个模块在改动某个数据的时候常常会对整个程序产生无法预料的错误。
    面向对象针对这个问题提出了数据封装,它将每个数据都封装在各自的类中,又设置了多种访问权限,别的类可以在允许的情况下访问该类中的数据,不允许的情况下则无法访问该数据,从而避免了非法操作和出错的可能性。

继承:
    正如前面所说,模块被相互调用,因此继承这个概念就应运而生了,我们可以将该模块定义为一个类,然后再声明一个类,将模块的所有成员都继承过来,这样就不会再导致出错或很难修改了。

多态:
    作为一名拳击手,他在进行比赛时可能会产生多种结果:
    1.他的牙被打飞了。
    2.他将对方的牙打飞了。
    3.他被击败了。
    4.他胜利了等。
    我们把这种不同的对象(不同的拳击手),调用相同名称的函数(胜利)却可导致不同的行为或者结果的现象称为多态性。
    这在编程中经常使用,比如说你在设计一个拳击游戏,那么你定义的多个角色在打出一拳的时候通常会有多种行为反馈,一拳打空,一拳打到对方,一拳打飞牙齿。


什么是类、对象与成员:
    我们上文所说的人类就是一个类,它包含很多对象,比如小明,小红等人都可算作人类的对象。这些对象都拥有人类共同的功能和数据,比如身高,体重,年龄,性别,另外还会说话,吃饭,喝水等。这些功能我们可看做是人类共有的方法或者函数,而具体化人类的身高,体重这些数据我们可看作是人类的成员变量。
    这样我们就可以进一步了解到,类是由若干个变量和相关的函数组成。而对象则可拥有这些变量和函数。

再举一个很形象的例子:
    一个硬盘可以执行读写操作,这是它的主要功能,又叫方法或者函数。他还有型号、容量、转速等数据,我们把它叫做变量。而硬盘又有好多种品牌,如:迈括硬盘、希捷硬盘、西部数据硬盘等,我们把这些品牌都看作电脑这个大类的对象,这些对象都有拥有硬盘类共有的功能和数据,比如希捷硬盘又型号、容量和转速等数据,这是硬盘类的共同数据,又叫成员变量,而且希捷硬盘有读取数据和写入数据的功能,这是硬盘类的共同方法,又叫成员函数。
    每个对象都可将自己的数据进行封装,以避免别的对象修改。比如希捷硬盘某个型号的容量是 8 0 G ,这个数据只是希捷硬盘某个型号所拥有,迈括硬盘厂商不可能去修改希捷硬盘的容量,因为迈括硬盘也有自己的容量,它可能是 8 0 G,也可能是 180 G,这由迈括生产商自己来定义。

最后用一句话来归纳一下:
    硬盘是一个类,希捷硬盘是该硬盘类的一个对象,型号、容量和转速是该类的数据成员。读取数据、写入数据是该类的方法成员,又叫成员函数。数据成员和成员函数统称为该类的成员,对象拥有并且可以封装这些成员。


声明一个类:
 
class HUMAN//(关键字class)声明一个类——人类
{
public://(关键字公有)表示该类的对象可以直接访问这些成员
void GetHeight();//定义一个功能函数:获得身高骆驼命名法,两个单词的首字母是大写
void GetWeight();//定义一个功能函数:获得体重
private://(关键字私有)表示后面的成员都是私有的,不能被对象直接访问,必须通过公有的成员函数才能访问
int Height;//私有成员:身高与体重
int Weight;
};

声明一个类并没有为人类分配内存,它只是告诉编译器:人类是什么,它包含了哪些类型的数据,功能是什么。
同时还告诉编译器该类有多大,累的大小是根据该类的变量来定的,该类有两个成员变量,一个是身高,一个是体重,它们都是int型,一个int型占用4个字节的内存,因此该类的大小是2*4=8个字节。该类的方法不占用内存,因为我们没有为方法成员函数声明类型,他们返回值都是void。


定义一个对象:

#include<iostream>
using namespace std;
class HUMAN//(关键字class)声明一个类——人类
{
public://(关键字公有)表示该类的对象可以直接访问这些成员
void GetHeight()//定义一个功能函数(成员函数)骆驼命名法,两个单词的首字母是大写
{cout << Height; }//输出身高
void SetHeight(int H){ Height = H; }//利用H变量来为私有数据成员赋值
int GetAge(){ return Age; }//第二种方法,已便于输出年龄
void SetAge(int A){ Age = A; }
void GetWeight();//声明一个功能函数:获得体重
void SetWeight(int);//第三种方法,声明设置体重的函数在类外定义
private://(关键字私有)表示后面的成员都是私有的,不能被对象直接访问,必须通过公有的成员函数才能访问
int Height;//私有成员:身高与体重,可以直接初始化身高和体重的值
int Weight;//数据成员
int Age;//年龄
};
void HUMAN::GetWeight()//在此定义功能函数
{
cout << Weight;//输出体重
}
void HUMAN::SetWeight(int W)  //第三种方法,定义设置函数
{
Weight = W;
}
void main()
{
HUMANRose;//定义一个对象,玫瑰为对象名
Rose.SetHeight(150);//设置身高
Rose.SetWeight(50);//设置体重
cout << "Rose的身高:";
Rose.GetHeight();
cout << endl;
cout << "Rose的体重:";
Rose.GetWeight();
cout << endl;
Rose.SetAge(10);//设置年龄,利用返回值代替输出语句
cout << "Rose的年龄:" << Rose.GetAge()<<endl;
}
本例中赋值是属性,输出是方法。
类只是个抽象的名词,而对象则是实际的个体,比如说人类是泛指所有人,而“玫瑰”却是一个具体的人。
嵌套 i f  三目 :

#include<iostream>
using namespace std;
class HUMAN//(关键字class)声明一个类——人类
{
public:
void Set(int w)
{
if (w > 0 && w < 100)
{
Weight = w;
}
else
{
cout << "请将Ste函数设置为一个大于0小于100的数,否则默认返回0;\n";
Weight = 0;
}
}
int Show(){ return Weight; }
private:
int Weight;
};
void main()
{
HUMANRose;//定义一个对象,玫瑰为对象名
Rose.Set(99);
cout << "Rose的体重为:" << Rose.Show() << endl;
HUMAN   Tree;//牡丹
Tree.Set(60);
cout << "Tree的体重为:" << Tree.Show() << endl;
}
 
定义类或对象容易犯的错误:
    类是个抽象的名词,它不是具体的某个个体,因此我们无法对它进行赋值操作。正如:int=5;这是错的,因为int代表一个类型,而不是某个具体的变量,对象与类也是一样不能进行赋值。
    类 声明一个对象,对象用点运算符调用数据成员或者功能函数进行操作,类使用::调用功能函数,公有成员可以被多次调用。

注意要点:
    1、要使用关键字 class 来声明一个类。
    2、要使用类名来定义一个对象。
    3、不能混淆声明和定义,声明是说明该类是什么,定义则是为一个对象分配内存。
    4、要使用点运算符来访问类的成员。
    5、要使用对象与点运算符访问对象的数据成员并给它们赋值。
    6、不要混洗类和对象,不要给类赋值。
    7、类的成员默认是私有,私有成员不能被对象直接访问,只能通过在类中设定的接口函数来访问,所以公有成员必须使用关键字public 。

建议:将所有数据成员都设置为私有,用接口函数来访问它们。
函数是用来执行一定功能的代码,功能函数则只能被类的对象所使用的函数。
对象只能使用该类提供的函数,假如类没有提供某个函数,那么对象就不具备该函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值