什么是多态性,C++中是如何实现多态的
展开全部
多态按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。
多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说,父亲的行为像儿子,而不是儿子的行为像父亲。
举个例子:例如ATM机。世界上有非常多的银行,每个银行都有好多种卡。如果ATM需要为每一种卡写一种方法去调用,例如getMoney(CCBCard card),getMoney(BBCard card)就会非常的麻烦。而且维护起来就是灾难性的。因为每时每刻都可能会有新的卡出现。所以我们可以采用多态
getMoney(Card card),所有的银行卡都继承Card这个类。这样就可以避免为每一种卡写一个方法。但是每一种卡的使用方法,作用都不一样,Card如何调用每一种卡不同的内容呢?
这就需要多态。让你看起来像是操作的父类,但是实际的运行内容却是子类的内容。
下面有一段代码,你可以参考一下。
用父类的指针或者引用指向子类对象,来实现多态的作用
class A {
public:
A() {}
virtual void foo() {
cout << "This is A." << endl;
}
};
class B : public A {
public:
B() {}
void foo() {
cout << "This is B." << endl;
}
};
int main(int argc, char* argv[]) {
A *a = new B();
a->foo();
if(a != NULL)
delete a;
return 0;
}
这将显示:
This is B.
如果把virtual去掉,将显示:
This is A.
前面的多态实现使用抽象类,并定义了虚方法.
多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说,父亲的行为像儿子,而不是儿子的行为像父亲。
举个例子:例如ATM机。世界上有非常多的银行,每个银行都有好多种卡。如果ATM需要为每一种卡写一种方法去调用,例如getMoney(CCBCard card),getMoney(BBCard card)就会非常的麻烦。而且维护起来就是灾难性的。因为每时每刻都可能会有新的卡出现。所以我们可以采用多态
getMoney(Card card),所有的银行卡都继承Card这个类。这样就可以避免为每一种卡写一个方法。但是每一种卡的使用方法,作用都不一样,Card如何调用每一种卡不同的内容呢?
这就需要多态。让你看起来像是操作的父类,但是实际的运行内容却是子类的内容。
下面有一段代码,你可以参考一下。
用父类的指针或者引用指向子类对象,来实现多态的作用
class A {
public:
A() {}
virtual void foo() {
cout << "This is A." << endl;
}
};
class B : public A {
public:
B() {}
void foo() {
cout << "This is B." << endl;
}
};
int main(int argc, char* argv[]) {
A *a = new B();
a->foo();
if(a != NULL)
delete a;
return 0;
}
这将显示:
This is B.
如果把virtual去掉,将显示:
This is A.
前面的多态实现使用抽象类,并定义了虚方法.
2018-07-31 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
C++中,实现多态有以下方法:虚函数,抽象类,覆盖,模板(重载和多态无关)。
虚函数是指在某基类中声明为 virtual 并在一个或多个派生类中被重新定 义的成员函数,用法格式为:virtual 函数返回类型 函数名(参数表) {函数体};实现多态性,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数。
C++为了让一个类成为抽象类,至少必须有一个纯虚函数。包含至少一个纯虚函数的类视为抽象类。
虚函数是指在某基类中声明为 virtual 并在一个或多个派生类中被重新定 义的成员函数,用法格式为:virtual 函数返回类型 函数名(参数表) {函数体};实现多态性,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数。
C++为了让一个类成为抽象类,至少必须有一个纯虚函数。包含至少一个纯虚函数的类视为抽象类。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我举个通俗一点的例子吧,
比如生物是一个类,生物类里面包含了一个类叫鸟类
生物*是爸爸(父类),鸟类**是儿子(子类),鱼类**是二儿子(子类)。龙生九子,各不相同。
生物*的特点{活的,有细胞},儿子 鸟类**继承了爸爸{活的,有细胞},还延伸出了一个特点{有翅膀},所以鸟类**的特点是{活的,有细胞,有翅膀};
而鱼类**也延伸出自己的特点,有{鳃},所以鱼类的特点{活的,有细胞,鳃}。
——————————————————
问题:这tm不是继承性吗?关多态性屁事?
划重点:没有继承性,就不会有多态性的存在(面向对象三大特性:封装、继承、多态)。
多态性(基于继承所显示的多重特性)。所以!
只要发现了“翅膀”,人们可以立刻判断是鸟,第二反应是它还是生物呢~~~
发现“鳃”,哦,它是鱼类,第二反应,它也是生物呀~~~
————————————————————————
多态性可以快速的判断事物本身的特点,而不用通过依赖顺序判断(先判断是不是生物,再查找有没有翅膀),明明就有个“鳃”你看见了,这就是一条鱼!何必多此一举????
————————————————————————————
补充关于非多态的继承:
举个栗子:
父类是车{承重1-100,速度1-100},跑车是车的子类,
跑车{承重1-10,速度90-100},
卡车{承重90-100,速度10-20},
OK?没有显示出特点,只是划分了更精确的区间。
所以!划重点:
——————————————————————————
多态,继承等等是概念!概念!概念!理解这个概念,而不是片面断裂的人为划界限!
因为面向对象这三个特性是融合在一体的,缺一不可,缺了,就“没对象了”,哈哈哈哈~~
比如生物是一个类,生物类里面包含了一个类叫鸟类
生物*是爸爸(父类),鸟类**是儿子(子类),鱼类**是二儿子(子类)。龙生九子,各不相同。
生物*的特点{活的,有细胞},儿子 鸟类**继承了爸爸{活的,有细胞},还延伸出了一个特点{有翅膀},所以鸟类**的特点是{活的,有细胞,有翅膀};
而鱼类**也延伸出自己的特点,有{鳃},所以鱼类的特点{活的,有细胞,鳃}。
——————————————————
问题:这tm不是继承性吗?关多态性屁事?
划重点:没有继承性,就不会有多态性的存在(面向对象三大特性:封装、继承、多态)。
多态性(基于继承所显示的多重特性)。所以!
只要发现了“翅膀”,人们可以立刻判断是鸟,第二反应是它还是生物呢~~~
发现“鳃”,哦,它是鱼类,第二反应,它也是生物呀~~~
————————————————————————
多态性可以快速的判断事物本身的特点,而不用通过依赖顺序判断(先判断是不是生物,再查找有没有翅膀),明明就有个“鳃”你看见了,这就是一条鱼!何必多此一举????
————————————————————————————
补充关于非多态的继承:
举个栗子:
父类是车{承重1-100,速度1-100},跑车是车的子类,
跑车{承重1-10,速度90-100},
卡车{承重90-100,速度10-20},
OK?没有显示出特点,只是划分了更精确的区间。
所以!划重点:
——————————————————————————
多态,继承等等是概念!概念!概念!理解这个概念,而不是片面断裂的人为划界限!
因为面向对象这三个特性是融合在一体的,缺一不可,缺了,就“没对象了”,哈哈哈哈~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询