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