您现在的位置是:亿华云 > 域名
EasyC++,多态
亿华云2025-10-09 01:22:32【域名】9人已围观
简介多态在我们之前介绍的继承的情况当中,派生类调用基类的方法都是不做任何改动的调用。但有的时候会有一些特殊的情况,我们会希望同一个方法在不同的派生类当中的行为是不同的。举个简单的例子,比如speak方法,
多态
在我们之前介绍的多态继承的情况当中,派生类调用基类的多态方法都是不做任何改动的调用。
但有的多态时候会有一些特殊的情况,我们会希望同一个方法在不同的多态派生类当中的行为是不同的。举个简单的多态例子,比如speak方法,多态在不同的多态类当中的实现肯定是不同的。如果是多态Human类,就是多态正常的说话,如果是多态Dog类可能是汪汪,而Cat类则是多态喵喵。
在这种情况下只是香港云服务器多态简单地使用继承是无法满足我们的要求的,最好能够有一个机制可以让方法有多种形态,多态不同的多态对象去调用的逻辑不同。这样的多态行为称为多态。
这里稍微强调一下,多态是一种面向对象的设计思路,本身和C++不是强绑定的,其他语言当中一样有多态,只不过实现的方式可能有所不同。
在C++当中有两种重要的机制用于实现多态:
在派生类当中重新定义基类的方法 使用虚方法我们来看一个例子:
class Mammal { private: string name; public: Mammal(string n): name(n) { } string Name() const{ return name; } virtual void speak() const { cout << "cant say anything" << endl; } virtual ~Mammal() { }; }; class Human : public Mammal{ private: string job; public: Human(string n, string j): Mammal(n), job(j) { } virtual void speak() const { cout << "im human" << endl; } };由于示例比较简单,所以我们把类的声明和实现写在一起了。
从结构上来看,这就是一个简单的继承,我们实现了两个类,一个叫做Mammal,一个叫做Human,然后给它们各自定义了一些成员变量。亿华云
值得注意的是speak函数,我们在函数声明前面加上了一个关键字virtual,这表示这是一个虚函数。
方法被定义成虚方法之后,在程序执行的时候,将会根据派生类的类型来选择执行的方法版本。在进行调用的时候,程序是根据对象类型而不是引用和指针的类型来选择执行的方法,如:
Mammal *m = new Human("man", "spiderman"); m->speak();这里我们用一个Mammal的指针指向了一个Human类型的对象,当我们调用方法的时候,由于speak方法是一个虚方法。因此执行的时候程序会根据对象的类型也就是Human去执行Human对象中的speak方法,而不是Mammal中的服务器托管。
通常我们会将析构函数也设置成虚方法,因为派生类当中往往有一些专属成员,这是一种惯例。因为如果析构函数不是虚函数,那么只会调用对应指针类型的析构函数,这意味着可能在一些情况下产生错误和问题。
在上述的示例当中,我们是将类方法的实现和声明写在一起了,如果还是采取和之前一样分开实现的方式,需要注意我们无需在函数签名中加上virtual关键字。
本文转载自微信公众号「Coder梁」,可以通过以下二维码关注。转载本文请联系Coder梁公众号。
很赞哦!(45857)
下一篇: 4.域名的整体品牌营销力
站长推荐
众所周知,com域名拥有最大的流通市场和流通历史。最好选择com域名,特别是在购买域名时处理域名。其次可以是cn域名、net域名、org域名等主流域名,现在比较流行的王域名和顶级域名,都是值得注册和投资的。
一篇带给你DDD领域建模实战
探寻 Redis 内存诡异增长的元凶
MySQL千万级的大表要怎么优化(读写分离、水平拆分、垂直拆分)
为了避免将来给我们的个人站长带来的麻烦,在选择域名后缀时,我们的站长最好省略不稳定的后缀域名,比如n,因为我们不知道策略什么时候会改变,更不用说我们将来是否还能控制这个域名了。因此,如果站长不是企业,或者有选择的话,如果不能选择域名的cn类,最好不要选择它。
数据库的这些性能优化,你做了吗?
EventEmitter 的核心功能实现
阿里二面:怎么实现两级缓存