使用多态赋值
Using polymorphic assignment
我对c++编程非常陌生,并试图理解这种多态赋值。我在网上进行了研究,并看到了多个例子,但唯一有意义的是跟踪非多态内存占用,你有父类和派生类。如果你有一个父类,然后有多个派生类。如何使用基类指针类型变量的多态赋值来调用父类中的方法。因此,使用该方法生成父类和派生类的输出。我所要求的只是你能在书中找到的清晰度,这样我就能理解这个概念。然后我将创建我自己的测试用例。谢谢你的帮助!
#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;
}
这是相当古老的一个,但也许是另一个解释多态赋值的尝试(取自Alan Ezust, Paul Ezust在CPP与Qt第2版中的设计模式介绍)
假设你有一个抽象基类:
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函数。
相关文章:
- 基类和派生类的多态赋值运算符
- 如何在不同类型的值之间进行选择以传递给多态函数?
- 运算符重载多个任务的下标和赋值运算符
- 为多个签名使用相同的代码重载赋值运算符?
- 多态值类型和接口
- 为多维向量赋值
- 循环赋值的多维数组:表达式必须是可修改的左值
- 多态性是否适用于值?或者在按(基)值返回时使用派生类的移动构造函数
- 具有虚拟赋值运算符的多态性
- 在 c++ 中为多维特征矩阵赋值
- 如何在代码块 IDE 上修复此警告,警告:按值 [-Wcatch-value=] 捕获多态类型"类 std::d omain_error"
- 自动复制=按值并支持多态性的适当类型的非静态字段
- 如何实现赋值运算符,使多个实例共享公共数据
- 有可能将多个整数赋值为一吗
- 使用多态性将派生类的值复制到基类
- 在一个语句中对原子布尔变量进行多次赋值
- 由支持多态性的值池存储,如何使用智能指针
- 重载赋值运算符 - 多态容器
- 使用多态赋值
- 以多态方式使用派生类的std::vector成员的复制赋值会导致内存泄漏