c++的虚函数与对象切割
一道非常基础的题目,请回复下面程序的结果:
#include <iostream.h>
class ClassA
{
public:
void fun1();
void fun2();
virtual void fun3();
};
void ClassA::fun1()
{
cout << "ClassA.fun1"<<endl;
};
void ClassA::fun2()
{
cout << "ClassA.fun2"<<endl;
};
void ClassA::fun3()
{
cout << "ClassA.fun3"<<endl;
};
class ClassB : public ClassA
{
public:
void fun1();
void fun2();
virtual void fun3();
};
void ClassB::fun3()
{
cout << "ClassB.fun3"<<endl;
};
class ClassC : public ClassB
{
public:
void fun1();
void fun2();
virtual void fun3();
};
void ClassC::fun3()
{
cout << "ClassC.fun3"<<endl;
};
void main()
{
ClassA *a[3];
ClassA a1;
ClassB b1;
ClassC c1;
a1.fun3();
b1.fun3();
c1.fun3();
a[0] = &a1;
a[1] = &b1;
a[2] = &c1;
cout << "virtual function array test" <<endl;
for(int i=0;i<3;i++)
{
a[i]->fun3();
}
cout << "((ClassA)&b1).fun3():";
((ClassA*)&b1)->fun3();
//object slicing
cout << "object slicing"<<endl;
cout <<"((ClassA)b1).fun3():";
((ClassA)b1).fun3();
}
class ClassA
{
public:
void fun1();
void fun2();
virtual void fun3();
};
void ClassA::fun1()
{
cout << "ClassA.fun1"<<endl;
};
void ClassA::fun2()
{
cout << "ClassA.fun2"<<endl;
};
void ClassA::fun3()
{
cout << "ClassA.fun3"<<endl;
};
class ClassB : public ClassA
{
public:
void fun1();
void fun2();
virtual void fun3();
};
void ClassB::fun3()
{
cout << "ClassB.fun3"<<endl;
};
class ClassC : public ClassB
{
public:
void fun1();
void fun2();
virtual void fun3();
};
void ClassC::fun3()
{
cout << "ClassC.fun3"<<endl;
};
void main()
{
ClassA *a[3];
ClassA a1;
ClassB b1;
ClassC c1;
a1.fun3();
b1.fun3();
c1.fun3();
a[0] = &a1;
a[1] = &b1;
a[2] = &c1;
cout << "virtual function array test" <<endl;
for(int i=0;i<3;i++)
{
a[i]->fun3();
}
cout << "((ClassA)&b1).fun3():";
((ClassA*)&b1)->fun3();
//object slicing
cout << "object slicing"<<endl;
cout <<"((ClassA)b1).fun3():";
((ClassA)b1).fun3();
}
如果你知道结果,请回复!以后我再解释virtual function是怎么实现多态的!
Author:repository
From: http://repository.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
From: http://repository.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
2008-12-10 盼了好久终于盼到了今天