zoukankan      html  css  js  c++  java
  • c++拾遗(二)

    1. 虚函数

    使得在基类声明的函数能够在各个派生类里面重新定义。比如下面这个例子

       1: #include <iostream>
       2: #include <string>
       3: using namespace std;
       4: class Employee{
       5:     string first_name, family_name;
       6:     short department;
       7: public:
       8:     Employee(const string &n, int d);
       9:     virtual void print() const;
      10: };
      11: void Employee::print()const{
      12:     cout<<family_name<<department<<endl;
      13: }
      14: Employee::Employee(const string &n, int d):first_name(n),department(d){}
      15: class Manager:public Employee{
      16:     //list<Employee*> group;
      17:     short level;
      18: public:
      19:     Manager(const string &n, int d, int lvl);
      20:     void print()const;
      21: };
      22: Manager::Manager(const string &n, int d , int lvl):Employee(n,d),level(lvl){}
      23: void Manager::print() const
      24: {
      25:     Employee::print();
      26:     cout<<level<<endl;
      27: }
      28: int main()
      29: {
      30:     Employee e("Brown",1234);
      31:     Manager m("Smith",1234,2);
      32:     e.print();
      33:     m.print();
      34:     Employee *p = &e;
      35:     p->print();
      36:     p = &m;
      37:     m.print();
      38:     Manager *q = &m;
      39:     q->print();
      40:  
      41: }

    基类声明了一个虚函数 virtual void print() const; 用来打印类成员的信息。在基类和派生类中分别定义print函数的具体内容。

    在实现中定义一个指向基类对象的指针,分别用基类和派生类的对象地址赋值。然后通过指针调用print函数,可以发现,调用的分别是基类和派生类定义的print函数。

    对于给定的类型为base*的指针,被指的对象到底属于哪个派生类呢?通过虚函数,我们解决了这个问题。程序的输出为:

       1: 1234
       2: 1234
       3: 2
       4: 1234
       5: 1234
       6: 2
       7: 1234
       8: 2
  • 相关阅读:
    MP4文件格式
    ASP.net 学习路线(详细)
    H.264开源解码器评测
    H264编码 封装成MP4格式 视频流 RTP封包
    MP4介绍与基本AVC编码(x264)教程
    创建一个简单的WCF程序
    VUE 从零开始 学习笔记 一
    关于阿里云短信接口的使用
    对Ul下的li标签执行点击事件——如何获取你所点击的标签
    二逼程序员与苦逼程序员
  • 原文地址:https://www.cnblogs.com/bovine/p/2283609.html
Copyright © 2011-2022 走看看