Chinaunix首页 | 论坛 | 博客
  • 博客访问: 782330
  • 博文数量: 231
  • 博客积分: 3217
  • 博客等级: 中校
  • 技术积分: 2053
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-04 12:01
文章分类

全部博文(231)

文章存档

2015年(1)

2013年(10)

2012年(92)

2011年(128)

分类: LINUX

2012-07-20 16:22:06

虚函数的租用时允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用访问基类和派生类中的同名函数。

点击(此处)折叠或打开

  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4. class Student{
  5.     public:
  6.         Student(int n,string na,float sc){num=n;name=na;score=sc;}
  7.         virtual void show(){cout<<"num:"<<num<<" name:"<<name<<" score:"<<score<<endl;}
  8.     protected:
  9.         int num;
  10.         string name;
  11.         float score;
  12. };

  13. class Graduate:public Student
  14. {
  15.     public:
  16.         Graduate(int n,string na,float sc,float p):Student(n,na,sc),pay(p){}
  17.         void show(){Student::show();cout<<" pay:"<<pay<<endl;}
  18. //void show(){cout<<"num:"<<num<<" name:"<<name<<" score:"<<score<<" pay:"<<pay<<endl;}
  19.     private:
  20.         float pay;            
  21. };

  22. int main()
  23. {
  24. Student stud1(1001,"lili",87.5);
  25. Graduate grad1(2001,"lpc",88.9,5689);
  26. Student *pt=&stud1;
  27. pt->show();
  28. pt=&grad1;
  29. pt->show();
  30. /*
  31. pt->show();
  32. stud1.show();
  33. Graduate *pk=&grad1;
  34. pk->show();
  35. grad1.show();
  36. grad1.Student::show();*/
  37. return 0;
  38. }
在Student类中声明show函数时在最左边加一个关键字virtual:virtual void show();
这样就把Student类中的show函数声明为虚函数,在编译运行grad1中数据show就能全部显示出来
 
1、当把基类的每个成员函数声明为虚函数后,允许在其派生类中对该函数重新定义,赋予它新的功能,并且可以通过指向基类的指针指向同一类族中不同类的对象,从而调用其中的同名函数。使用方法:
在基类用virtual声明成员函数为虚函数。这样就可以在派生类中重新定义此函数,为它赋予新的功能,并能方便被调用。
2、在派生类中重新定义此函数,要求函数名,函数类型,函数参数个数和类型全部与基类的虚函数相同,并根据派生类的需要重新定义函数体。
3、定义一个指向基类对象的指针变量,并使它指向同一类族中某以对象。
4、通过该指针变量调用此虚函数,此时调用的就是指针变量指向的对象的同名函数。
 
多态性分为静态多态性和动态多态性。
静态多态性:在程序编译时系统就能决定调用的是哪个函数,因此也称为编译时的多态性。
动态多态性:在程序运行过程中才动态地确定操作所针对的对象,又称运行时的多态性。
确定调用的具体对象的过程称为关联
在编译时即可确定其调用的虚函数属于哪一类,其过程称为静态关联
在运行阶段把虚函数和对象绑定在一起的过程称为动态关联。
阅读(597) | 评论(0) | 转发(0) |
0

上一篇:c++学习(四)

下一篇:Emacs入门

给主人留下些什么吧!~~