使用多态分配

时间:2011-08-06 18:27:36

标签: c++

我对C ++编程很新,并尝试理解这种多态分配的事情。我已经在网上进行了研究,并且已经看到了多个示例,但唯一有意义的是跟踪非多态内存占用,其中您有父类和派生类。如果您有一个父类然后有多个派生类,该怎么办?如何使用基类的指针类型的变量的多态分配来调用父类中的方法。因此,使用该方法生成父类和派生类的输出。所有我要求的是为了清晰,因为你应该在书中找到所以我能理解这个概念。然后我将创建自己的测试用例。我感谢任何帮助!

2 个答案:

答案 0 :(得分: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;
}

我想这就是你要求的。

答案 1 :(得分:0)

这是一个很旧的,但也许是另一个尝试解释多态分配(取自CPP的设计模式简介,由Qt第二版由Alan Ezust,Paul 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函数。