虛函數__函數

來源:互聯網
上載者:User

虛函數為了重載和多態的需要,在基類中是有定義的,即便定義是空,所有子類中可以重寫也可以不寫基類中的函數。
純虛函數在基類中是沒有定義的,必須在子類中加以實現,很像java中的介面函數。


虛函數

引入原因:為了方便使用多態特性,我們常常需要在基類中定義虛函數。

class Cman{  public:    virtual void Eat(){……};    void Move();   private:};class CChild : public CMan{  public:    virtual void Eat(){……};  private:};CMan m_man;CChild m_child;CMan *p ;   //這才是使用的精髓,如果不定義基類的指標去使用,沒有太大的意義p = &m_man ;p->Eat(); //始終調用CMan的Eat成員函數,不會調用 CChild 的p = &m_child;p->Eat(); //如果子類實現(覆蓋)了該方法,則始終調用CChild的Eat函數//不會調用CMan 的 Eat 方法;如果子類沒有實現該函數,則調用CMan的Eat函數p->Move(); //子類中沒有該成員函數,所以調用的是基類中的


純虛函數引入原因:
1、同“虛函數”;
2、在很多情況下,基類本身產生對象是不合情理的。例如,動物作為一個基類可以派生出老虎、孔雀等子類,但動物本身產生對象明顯不合常理。

class A{
  public:
    void func1();                 // 普通函數
    virtual void func2();      // 虛函數
    virtual void func3()=0;  // 純虛函數
};


#include "stdafx.h"#include <iostream>#include <string>class Graph{  protected:    double x;    double y;  public:     Graph(double x,double y);     void virtual showArea();//定義為虛函數或virtual void showArea()};Graph::Graph(double x,double y){    this->x=x;    this->y=y;}void Graph::showArea(){    std::cout<<"計算圖形面積"<<std::endl;}class Rectangle:public Graph{  public:    Rectangle(double x,double y):Graph(x,y){};    virtual void showArea();//定義為虛函數};void Rectangle::showArea(){    std::cout<<"矩形面積為:"<<x*y<<std::endl;}class Triangle:public Graph{  public:    Triangle(double d,double h):Graph(d,h){};    virtual void showArea();//定義為虛函數};void Triangle::showArea(){    std::cout<<"三角形面積為:"<<x*y*0.5<<std::endl;}class Circle:public Graph{  public:    Circle(double r):Graph(r,r){};    virtual void showArea();//定義為虛函數};void Circle::showArea(){    std::cout<<"圓形面積為:"<<3.14*x*y<<std::endl;}int main(){    Graph *graph;    Rectangle rectangle(10,5);    graph=&rectangle;    graph->showArea();    Triangle triangle(5,2.4);    graph=?    graph->showArea();    Circle circle(2);    graph=&circle;    graph->showArea();    return0;}



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.