2011-08-06 28 views
1

我對C++編程非常陌生,並試圖理解這種多態分配的東西。我在網上進行了研究並看到了多個示例,但唯一有意義的是跟蹤非多態內存佔用空間,其中包含父類和派生類。如果你有一個父類和多個派生類,會怎麼樣?如何使用基類的指針類型變量的多態賦值在父類中調用方法。因此,使用該方法生成父類和派生類的輸出。我所要求的一切都是清晰的,你應該在書中找到,這樣我才能理解這個概念。然後我將創建我自己的測試用例。我感謝任何幫助!使用多態分配

+0

這裏有十億個這樣的例子。 –

+0

你可以擺動我的鏈接之一,因爲我可能會誤解。看起來我一直在引擎蓋下的每一個例子,除了我需要的。 – Mikey

+1

你可能想要考慮避免這樣的結構。 –

回答

0
#include<iostream> 
using namespace std; 

class base 
{ 
public: 

    int baseVariable; 
    base(int arg=0):baseVariable(arg) {} 
    virtual void print()=0; 
}; 

class derivedOne:public base 
{ 
public: 
    derivedOne(int arg=0):base(arg){} 

    void print() 
    { 
     cout<<"Printing with derivedOne's print function.baseVarible = "<< base::baseVariable<<endl; 
    } 
}; 

class derivedTwo:public base 
{ 
public: 

    derivedTwo(int arg=0):base(arg){}; 
    void print() 
    { 
     cout<<"Printing with derivedTwo's print function.baseVarible = "<< base::baseVariable<<endl; 
    } 
}; 

int main() 
{ 
    base *obj1=new derivedOne(5); 
    base *obj2=new derivedTwo(7); 

    obj1->print(); 
    obj2->print(); 
    return 0; 
} 

我想這就是你要求的。

+0

我在這裏看不到任何任務,更不用說多態分配。 –

+0

使用基類指針類型變量的多態賦值顯示基類成員函數的輸出。通過這個,我想通過將指針類型的變量指向派生類來顯示其他派生類的輸出。我希望是有道理的。感謝您給這個例子,你不必嘲笑,但我很感激它..例如或網站鏈接是好的..再次感謝。 – Mikey

+0

我認爲這是多態賦值與基指針... base * obj1 = new derivedOne(5); base * obj2 = new derivedTwo(7); – Mikey

0

這是一個很古老的,但在解釋多態分配也許闖闖(自言小心地設計在CPP模式使用Qt第二版由Alan Ezust,保羅Ezust)

比方說你有一個抽象基類:

class Shape { 
public: 
    virtual double area() = 0; 
    virtual QString getName() = 0; 
    virtual QString getDimensions() = 0; 
    virtual ~Shape() {} 
}; 

而且你必須從這個基類繼承兩個類:

class Rectangle : public Shape { 
public: 
    Rectangle(double h, double w) : m_Height(h), m_Width(w) {} 

    double area(); 
    QString getName(); 
    QString getDimensions(); 

protected: 
    double m_Height, m_Width; 
}; 

class Circle : public Shape { 
public: 
    Circle(double r) : m_Radius(r) {} 

    double area(); 
    QString getName(); 
    QString getDimensions(); 
private: 
    double m_Radius; 
}; 

,你有你的主要應用領域:本

#include "shapes.h" 
#include <QString> 
#include <QDebug> 

void showNameAndArea(Shape* pshp) { 
    qDebug() << pshp->getName() << " " << pshp->getDimensions() 
      << " area= " << pshp->area(); 
} 

int main() { 
    Rectangle rectangle(4.1, 5.2); 
    Circle circle(6.1); 

    showNameAndArea(&rectangle); 
    showNameAndArea(&circle); 

    return 0; 
} 

在全局函數showNameAndArea,基類指針,pshp,依次給出三個子類對象的地址。對於每個地址分配,pshp以多態方式調用Rectangle和Circle類的正確的getName和area函數。