早教吧作业答案频道 -->其他-->
虚数多态c++classA{public;virtualvoidfoo(){cout
题目详情
虚数 多态 c++
class A
{
public;
virtual void foo()
{
cout< }
void fuc()
{
cout< }
};
class B:public A
{
public;
virtual void foo()
{
cout< }
void fuc()
{
cout< }
};
int main()
{
B b;
A&ra=b;
ra.foo();
ra.fuc();
}
运行main函数后会有什么结果??
class A
{
public;
virtual void foo()
{
cout< }
void fuc()
{
cout< }
};
class B:public A
{
public;
virtual void foo()
{
cout< }
void fuc()
{
cout< }
};
int main()
{
B b;
A&ra=b;
ra.foo();
ra.fuc();
}
运行main函数后会有什么结果??
▼优质解答
答案和解析
-sh-4.1$ ./a.out
B::foo() is called
A::fuc() is called
运行结果是这样的,
如果A的对象ra没有引用则是
A::foo() is called
A::fuc() is called
原因
foo是虚函数在基类和继承类都只能存在一个,而每个对象有一个vtbl指针指向每个虚函数,在某个对象 被使用的时候会指向某个虚函数,因为A使用引用,所以相当于改变了ra对象的虚函数所指的vtbl指针,所以出现上面的结果
有些说的不是很精确,也不知道说的是不是对的
B::foo() is called
A::fuc() is called
运行结果是这样的,
如果A的对象ra没有引用则是
A::foo() is called
A::fuc() is called
原因
foo是虚函数在基类和继承类都只能存在一个,而每个对象有一个vtbl指针指向每个虚函数,在某个对象 被使用的时候会指向某个虚函数,因为A使用引用,所以相当于改变了ra对象的虚函数所指的vtbl指针,所以出现上面的结果
有些说的不是很精确,也不知道说的是不是对的
看了 虚数多态c++classA{...的网友还看了以下:
虚数多态c++classA{public;virtualvoidfoo(){cout 2020-07-13 …