返回信息流Core c;
Grad g;
Core* p;
Core& r = g;
c.grade(); // statically bound to Core::grade()
g.grade(); // statically bound to Grad::grade()
p->grade(); // dynamically bound, depending on the type of the object to which p points
r.grade(); // dynamically bound, depending on the type of the object to which r refers
怎么感觉最后一个是静态绑定到一个g,也就是grad类上了啊
是不是应该写成Core&r才能在r.grade();时动态绑定?
这是一条镜像帖。来源:北邮人论坛 / cpp / #33068同步于 2009/12/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求问一个关于动态绑定的问题
huge
2009/12/8镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
引用和指针一样都是动态绑定
有这样一个函数
void func(Core & p)
{
p.grade();
}
函数里的grade到底是哪个类的grade只有到运行时才能确定,比如:
Grad a;
Core c;
func(a); //func中的p.grade() 绑定到Grad::grade()
func(c); /func中的p.grade() 绑定到Core::grade()
所以叫动态绑定
大家对于动态绑定的理解不太一样吧
说g.grade()是动态绑定不太合适吧
【 在 coolwc (小包) 的大作中提到: 】
: 当grade是虚函数的话 无论是怎么样去引用都一样是动态绑定 查虚表
【 在 coolwc 的大作中提到: 】
: 当grade是虚函数的话 无论是怎么样去引用都一样是动态绑定 查虚表
你说的引用是指引用类型的引用还是函数的调用?
如果是函数的调用的话 虚函数未必查表
恩 我说的不对 如果编译器能通过当前引用或者指针类型来确定调用的是哪个函数就不用查虚表了
【 在 jmpesp 的大作中提到: 】
: 你说的引用是指引用类型的引用还是函数的调用?
: 如果是函数的调用的话 虚函数未必查表