面向对象思想、特征等

面向对象思想

面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。

起初,“面向对象”是专指在程序设计中采用封装、继承多态和抽象等设计方法。可是目前面向对象的思想已经涉及到软件开发的各个方面。如,面向对象的分析(OOA,Object Oriented Analysis),面向对象的设计(OOD,Object Oriented Design)、以及我们经常说的面向对象的编程实现(OOP,Object Oriented Programming)。

面向对象三大特征:

①封装

封装是指将数据与具体操作的实现代码放在某个对象内部,使这些代码的实现细节不被外界发现,外界只能通过接口使用该对象,而不能通过任何形式修改对象内部实现,正是由于封装机制,程序在使用某一对象时不需要关心该对象的数据结构细节及实现操作的方法。使用封装能隐藏对象实现细节,使代码更易维护,同时因为不能直接调用、修改对象内部的私有信息,在一定程度上保证了系统安全性。

②继承

面向对象之所以使用继承机制主要是用于实现代码的复用多个类所公用的代码部分可以只在一个类中提供,而其他类只需要继承即可。

③多态

多态是指在继承体系中,所有派生类都从基类继承接口,但由于每个派生类都是独立的实体,因此在接收同一消息的时候,可能会生成不同的响应。多态的作用作为隐藏代码实现细节,使得代码能够模块化;扩展代码模块,实现接口重用。简单来说:一种行为产生多种效果。

总的来说:封装可以隐藏实现细节同时包含私有成员,使得代码模块化并增加安全指数;继承可以扩展已存在的模块,目的是为了代码重用;多态则是为了保证:类在继承和派生的时候,保证家谱中任何类的实例被正确调用,实现了接口重用。

#include<iostream>
using namespace std;

class people
{
public:
	void eat()
	{
		cout << "eat" << endl;
	}
	virtual void speak()
	{
		cout << "hahaha!" << endl;
	}
private:
	int a;
	int b;
};//封装性
class student :public people//继承性
{
public:
	virtual void speak()
	{
		cout << "nihaoma" << endl;
	}
private:
	int b;
};


int main()
{
	student s;
	people *p = &s;
	p->speak();//多态性
	people peo;
	people *pp = &peo;
	pp->speak();
}

C++同名函数的关系

成员函数被重载的特征:

(1)相同的范围(在同一个类中);

(2)函数名字相同;

(3)参数不同;

(4)virtual关键字可有可无。

覆盖是指派生类函数覆盖基类函数,特征是:

(1)不同的范围(分别位于派生类与基类);

(2)函数名字相同;

(3)参数相同;

(4)基类函数必须有virtual关键字。

“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,

规则如下:

(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。

(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。(这里与覆盖唯一区别是在于有没有virtual) 此时,基类的函数被隐藏(注意别与覆盖混淆)。

C++三种继承的访问权限控制

众所周知,C++类中的成员(函数/变量)拥有三种访问权限:

       public:用该关键字修饰的成员表示公有成员,该成员不仅可以在类内可以被访问,在类外也是可以被访问的,是类对外提供的可访问接口;

       private:用该关键字修饰的成员表示私有成员,该成员仅在类内可以被访问,在类体外是隐藏状态;

       protected:用该关键字修饰的成员表示保护成员,保护成员在类体外同样是隐藏状态,但是对于该类的派生类来说,相当于公有成员,在派生类中可以被访问。

       对一个类的派生类来说,在继承基类的过程中,不仅包含了基类的所有成员,还增加了自己的成员,而派生类中成员的访问权限则会因为继承权限方式的不同而不同。

       相对于派生类成员的访问权限比较简单(派生类成员的访问权限就是取决于派生类中定义的权限),从基类中继承的成员的访问权限就相对较为复杂,这并不是简单地照搬基类的成员访问权限。基类成员在派生类中的访问权限与继承的方式有着密切的关系,在不同的继承方式下,访问权限也是不同的,总结如下:

       若继承方式是public,基类成员在派生类中的访问权限保持不变,也就是说,基类中的成员访问权限,在派生类中仍然保持原来的访问权限;

       若继承方式是private,基类所有成员在派生类中的访问权限都会变为私有(private)权限;

       若继承方式是protected,基类的共有成员和保护成员在派生类中的访问权限都会变为保护(protected)权限,私有成员在派生类中的访问权限仍然是私有(private)权限。

       总结上述规则,可以如下表所示:

猜你喜欢

转载自blog.csdn.net/qq_19525389/article/details/81707602