c 一道面试题【继承,多态】

来源:互联网 发布:360vr全景通 4.5 源码 编辑:程序博客网 时间:2024/06/16 09:16
     写出下面函数的正确输出结果:

点击(此处)折叠或打开

  1. #if (__GNUC__ > 2)
  2. #include <iostream>
  3. using std::cerr;
  4. using std::cout;
  5. using std::endl;
  6. using std::flush;
  7. #else
  8. #include <iostream.h>
  9. #endif

  10. using namespace std;

  11. class Base{public:
  12.     virtual void f(float x){ cout << "Base::f(float) " << x << endl; } 
  13.     void g(float x){ cout << "Base::g(float) " << x << endl; }
  14.     void h(float x)={ cout << "Base::h(float) " << x << endl; }
  15. };

  16.  

  17. class Derived : public Base{
  18. public:
  19.    virtual void f(float x){ cout << "Derived::f(float) " << x << endl; }
  20.    void g(int x){ cout << "Derived::g(int) " << x << endl; }
  21.    void h(float x){ cout << "Derived::h(float) " << x << endl; }
  22. };


  23. int main(void){
  24.     Derived d;//派生类对象
  25.     Base *pb = &d;
  26.     Derived *pd = &d;
  27.     pb->f(3.14f);//由virtual 虚函数重写,基类指针指向派生类对象,从而实现多态
  28.     pd->f(3.14f);

  29.     pb->g(3.14f);//基类和派生类都定义了“相同名称之函数”,那么通过对象指针调用成员函数时,到底调用了那个函数,必须视该指针的原始类型而定,而不是视指针实际所指的对象的类型而定
  30.     pd->g(3.14f); //pd 原型为派生类,所以调用派生类的成员函数
  31.      
  32.     pb->h(3.14f); 
  33.     pd->h(3.14f);
  34.     return 1;
  35. }
该题考查了c++的基础知识,基类与派生类之间的关系,基类与派生类实现的多态(virtual的应用)
g++编译后执行结果为
[root@localhost linuxstudy]# ./teituo 
Derived::f(float) 3.14
Derived::f(float) 3.14
Base::g(float) 3.14
Derived::g(int) 3
Base::h(float) 3.14
Derived::h(float) 3.14
[root@localhost linuxstudy]# 

阅读(210) | 评论(0) | 转发(1) |
0

上一篇:c++一道面试题【继承,多态】

下一篇:设计模式之观察者模式

相关热门文章
  • test123
  • 编写安全代码——小心有符号数...
  • 使用openssl api进行加密解密...
  • 一段自己打印自己的c程序...
  • sql relay的c++接口
  • 系统提供的库函数存在内存泄漏...
  • 初学UNIX环境高级编程的,关于...
  • chinaunix博客什么时候可以设...
  • 一个访问量较大网站的服务器。...
  • 收音机驱动与v4l2架构的关系,...
给主人留下些什么吧!~~
原创粉丝点击