我的理解是,“多态”就是:同样的操作,得到不同的结果。我们或许接触得多的是override,因为一开始比较正式和系统的讲多态这个概念的时候是虚函数的 override 引发的,但是不尽然,按照“同样的操作,得到不同的结果”的观点,override和overload都是实现多态的手段。(当然还有其它的手段)。
override意思是重写,仅仅发生在继承这个过程,在基类中定义了某个函数,且这个函数是virtual的——这是必要条件——再从基类继承出一个新的派生类,就可以在派生类重新定义这个函数”。override的条件比较苛刻,继承+虚函数。
overload就是重载了,允许多个函数具有相同的名字,这里的函数既可以是类的成员函数——如构造函数就可以重载多个版本,也可以是全局的函数。更明显的例子是运算符重载,complex类中复数的相加等运算就是+的重载,可以把运算符看成函数,从而被overload。
由上面的讨论可以看出,override和overload最大的相同点是:多个函数具有相同的名字。最大的不同点是:override是在程序运行的时候才决定调用哪个函数,overload是在代码被编译的时候决定调用哪个函数——动态联编。
引用:
多态往往是采用动态连编技术根据不同的情况进行不响应比如虚函数
这个要是没有“往往”就是错误的,加了“往往”也觉得不是很好,函数模板、函数指针、重载、虚函数的重写....这是我目前已经知道的——在eastcowboy的指点下去了解的,并体验了一下(后面再仔细提一下)....
引用:
多态到底有什么用阿?
(注意这几个相同与多态是一种不同的对象以单独的方式作用于相同消息的能力,
不同)这个概念是从自然语言中引进的——这个意识对于理解OOP是很好的。——我的一种学习体会就是,尽量在自然界中寻神似的感觉,嘿,OOP很好理解嘛!举个例子,动词“关闭”应用到不同的事务上其意思是不同的。关门,关闭银行账号或关闭一个程式的窗口都是不同的行为;其实际的意义取决于该动作所作用的对象。这个比方应该对理解多态有帮助,总之还是那句话:同样的操作,不同的对象执行,就会出现不同的结果。
大多数面向对象语言的多态特性都仅以虚拟函数的形式来实现,但C++除了一般的虚拟函数形式之外,还多了两种“类似于静态的”(因为我觉得没有虚函数那样足够灵活,不过,也够强大的了)多态机制:
1、操作符重载(函数重载的一种):例如,对整型和string对象应用 += 操作符时,每个对象都是以单
独的方式各自进行解释。显然,潜在的 += 实现在每种类型中是不同的。但是从直观上看,我们能够预期结果是什么。
2、模板:例如,当接受到相同的消息时,整型vector对象和串vector对象对消息反映是不同的,我们以关闭行为为例:
vector < int > vi;  vector < string > names;
string name("C++知识库");
vi.push_back( 5 ); // 在 vector 尾部添加整型
names.push_back (name); // 添加串和添加整型体现差别的潜在的操作
静态的多态机制不会导致和虚拟函数相关的运行时开。此外,操作符重载和模板两者是通用算法最基本的东西,在STL中体现得尤为突出。
关于多态的优点,说不清,主要是体验还是不够,很多书上是这样说的(比如C++ primer)依赖动态联编,达到统一的接口,不同的实现的功能。从代码执行角度来看,动态联编产生对象的静态类型和动态类型的区别,用户通过对象动态类型来匹配相应的实现,使得同样的代码有了不同的表现。多态使得类
的接口和实现分离,降低了程序的耦合性和编译的依赖性,提高了软件的模块化,从而诞生了各种各样所谓的模式。概括起来多态所带来的优点--灵活。其实后面的话我也不懂,呵呵,楼主要是有什么体会,一定记得告诉我!!
构造函数可以被重载

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。