
C++多态性与联编
多态性是指一种事物的多种形态即对同一函数调用不同的类对象会做出不同的响应能具体的说以一下两者的关系吗?我看书上的介绍到是会用虚函数可是概念上有些不太清楚还有当用指向基类对...
多态性是指一种事物的多种形态 即对同一函数调用不同的类对象 会做出不同的响应
能具体的说以一下两者的关系吗 ?我看书上的介绍 到是会用虚函数 可是概念上 有些不太清楚
还有当用指向基类对象的的指针指向用new运算符建立的派生类对象
再用该指针作为delete 的参数释放内存的时候只会执行基类的析构函数 因为它是指向派生类对象的基类部分的 那是否就意味着只释放了基类部分的内存呢?
派生类与基类函数的同名“覆盖” 在调用同名函数时是否也属于多态?
如果在同一类中 存在重载函数 那么在调用时 是要根据实参的个数或类型来判断的 那么时候是否也属于同一种调用形式 ? 是否是多态? 展开
能具体的说以一下两者的关系吗 ?我看书上的介绍 到是会用虚函数 可是概念上 有些不太清楚
还有当用指向基类对象的的指针指向用new运算符建立的派生类对象
再用该指针作为delete 的参数释放内存的时候只会执行基类的析构函数 因为它是指向派生类对象的基类部分的 那是否就意味着只释放了基类部分的内存呢?
派生类与基类函数的同名“覆盖” 在调用同名函数时是否也属于多态?
如果在同一类中 存在重载函数 那么在调用时 是要根据实参的个数或类型来判断的 那么时候是否也属于同一种调用形式 ? 是否是多态? 展开
2个回答
展开全部
多态是面向对象编程的一种概念,虚函数是c++多态特性的体现。重载,覆盖,模板都不属多态特性的体现。
无论是delete基类还是派生类指针,delete会释放对象的直接内存(即sizeof的部分),而间接内存(对象的指针成员指向的内存)是需要析构函数主动释放的,因此在delete基类指针时会有两种情况:如果基类析构函数是虚函数,会先调用下一级派生类的析构函数,再调用基类的;如果基类析构函数不是虚函数,就只会调用基类析构函数,这时属于派生类的间接内存会得不到释放造成内存泄露。
更多追问追答
追问
第二点我明白可是
关于第一点 我看谭浩强的书他说 函数的重载属于静态多态
动态多态是通过 虚函数实现的啊
这也就是 我最不明白 既然多态的前提是 用同一形式调用函数
那函数的重载 (运算符的重载函数除外) 在调用时 不是需要使用不同的形式吗(在参数个数不同的情况下)那还可以称为多态吗?
追答
这本来没绝对的标准,严格来说只有类型,参数,调用形式完全一致才符合多态的定义,c++只有虚函数符合这个标准。标准放宽点,类型不同也可以,那重载也可以叫多态,再宽点,只要函数名一样,参数个数不同也可以叫多态。多态的概念是所有oop语言都认可的,而静态多态,动态多态的概念应该是某些人根据一些编译型语言的特点作的延伸定义。很多东西理解就好了,没必要死抠概念。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询