21xrx.com
2024-12-22 19:42:23 Sunday
登录
文章检索 我的文章 写文章
C++经典多态代码示例
2023-07-14 12:33:10 深夜i     --     --
C++ 经典 多态 代码示例

C++是一种强大的编程语言,它支持面向对象编程(OO)的特性。其中,多态就是OO的核心特性之一,它可以使代码更加灵活和可维护。在此,我们给大家分享一些C++经典多态代码示例。

1. 虚函数(Virtual Function)

使用虚函数(Virtual Function)来实现多态是C++中最常用的方法。在基类中声明虚函数,子类可通过继承并重写虚函数,来实现对基类虚函数不同的实现。示例代码如下:


class Base {

public:

  virtual void print() {

    cout << "Base::print() called\n";

  }

};

 

class DerivedA: public Base {

public:

  void print() {

    cout << "DerivedA::print() called\n";

  }

};

 

class DerivedB: public Base {

public:

  void print() {

    cout << "DerivedB::print() called\n";

  }

};

 

void callPrint(Base *obj) {

  obj->print(); // 调用虚函数

}

 

int main() {

  Base *p = new Base();

  callPrint(p);

 

  p = new DerivedA();

  callPrint(p);

 

  p = new DerivedB();

  callPrint(p);

 

  return 0;

}

这段代码中,`Base`是基类,`DerivedA`和`DerivedB`是子类,均继承了`Base`。`Base`中的`print`函数是虚函数,子类中重写了`print`函数。通过调用`Base`类中的`callPrint`函数来调用`print`函数,实现了多态。

2. 纯虚函数(Pure Virtual Function)

纯虚函数(Pure Virtual Function)是一种特殊的虚函数,它没有实现代码,只有函数声明,必须由派生类提供具体实现。示例代码如下:


class Base {

public:

  virtual void print() = 0; // 纯虚函数

};

 

class DerivedA: public Base {

public:

  void print() {

    cout << "DerivedA::print() called\n";

  }

};

 

class DerivedB: public Base {

public:

  void print() {

    cout << "DerivedB::print() called\n";

  }

};

 

int main() {

  Base *p;

 

  p = new DerivedA();

  p->print();

 

  p = new DerivedB();

  p->print();

 

  return 0;

}

这段代码中,`Base`是基类,下面的`DerivedA`和`DerivedB`是子类,均继承了`Base`。`Base`中的print函数为纯虚函数,在派生类中必须实现。这里通过调用基类指针的`print`函数,实现了多态。

3. 虚析构函数(Virtual Destructor)

使用虚析构函数(Virtual Destructor)可以确保在销毁对象的时候,正确地释放所有的资源。示例代码如下:


class Base {

public:

  Base() {

    cout << "Base Constructor called\n";

  }

   

  virtual ~Base() {

    cout << "Base Destructor called\n";

  }

};

 

class DerivedA: public Base {

public:

  DerivedA() {

    cout << "DerivedA Constructor called\n";

  }

   

  ~DerivedA() {

    cout << "DerivedA Destructor called\n";

  }

};

 

class DerivedB: public Base {

public:

  DerivedB() {

    cout << "DerivedB Constructor called\n";

  }

   

  ~DerivedB() {

    cout << "DerivedB Destructor called\n";

  }

};

 

int main() {

  Base *p;

 

  p = new DerivedA();

  delete(p);

 

  cout << "\n";

 

  p = new DerivedB();

  delete(p);

 

  return 0;

}

这段代码中,`Base`是基类,下面的`DerivedA`和`DerivedB`是子类,均继承了`Base`。`Base`类的析构函数是虚析构函数,在删除对象的时候,可以正确地释放所有的资源。通过打印输出,在使用delete删除对象时,析构函数的调用顺序可以看出多态的使用效果。

总之,C++的多态是一种强大的编程技术,可以使代码更加灵活和可维护。在日常使用中可以灵活运用多态,提高代码的可读性和可拓展性。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复