c++中只有使用指针才能多态吗?普通实例和引用为什么不能多态?

父类:Father子类:Child{m_childAttr}func(/*const*/Father¶)//这里和const无关,但是我还是习惯在以类为参数时加上... 父类:Father 子类:Child{m_childAttr}
func(/*const*/ Father ¶)//这里和const无关,但是我还是习惯在以类为参数时加上const和引用
{
Child c;

c.m_childAttr = ((Child)para).m_childAttr;//编译不通过,报错的意思大概是“没有定义Father到Child的强转”
c.m_childAttr = ((Child*)(&m_para))->m_childAttr;//编译通过。先取地址变成指针,再强转为指向Child的指针,从而访问Father没有的属性

}
func(/*const*/ Father ¶)应为func(/*const*/ Father para)
展开
 我来答
Bison0505
推荐于2016-04-28
知道答主
回答量:21
采纳率:0%
帮助的人:17.8万
展开全部
多态是和继承联系在一起的,指针是指向一段内存地址,所以可以实现父类的指针指向子类的对象。因为指向的地址都是一个,只不过所容纳的内容有大有小。从子类的内容(大的)取出父类的内容(小的)是可以的,也就是父类的指针指向子类的对象是可行的,反之则不行,因为父类的小,反过来就会有一段内存是空的或者其它不定的内容。
追问
关于“指针能多态,而普通变量不能”说得很清楚,我明白了。
引用的本质跟指针一样,能不能多态呢?为什么我那段代码用引用来多态就报错?
追答
引用和指针看上去很多效果是一样的,其实是不同的。引用是别名,也就是一个东西叫几个不同的名字。所以一个对象不可能即是爸爸又是儿子,所以是不能多态的。
卑苑Bo
2018-03-13 · TA获得超过362个赞
知道小有建树答主
回答量:459
采纳率:0%
帮助的人:66.2万
展开全部
C++中,实现多态有以下方法:虚函数,抽象类,覆盖,模板(重载和多态无关)。
虚函数是指在某基类中声明为 virtual 并在一个或多个派生类中被重新定 义的成员函数,用法格式为:virtual 函数返回类型 函数名(参数表) {函数体};实现多态性,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数。
C++为了让一个类成为抽象类,至少必须有一个纯虚函数。包含至少一个纯虚函数的类视为抽象类。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mafangsan
推荐于2016-02-11 · TA获得超过1.2万个赞
知道大有可为答主
回答量:1万
采纳率:71%
帮助的人:2618万
展开全部

C++不是只有指针才能多态。

 

多态主要有两种方法实现:

  1. 基类的指针加上虚函数;

  2. 基类的引用加上虚函数。

也就是说可以用引用实现多态,但是都必须使用虚函数。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-07-27
展开全部
C++用函数指针实现多态,动态编译寻找你要调用的方法,其他语言如java、C#底层多态实现机制其实都是函数指针,只是功能封装丰富了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
baizhaoliangdu
2014-07-27 · TA获得超过184个赞
知道小有建树答主
回答量:333
采纳率:42%
帮助的人:131万
展开全部
引用和指针都可以
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式