多态、向下转换和虚函数
Polymorphism, Downcasting, and Virtual Functions
我有这段代码,用于将一个类更改为一个更面向对象的c++类,即:在主循环中调用更少。
class Shape abstract
{
public:
virtual bool Check_Collision(SDL_Point);
virtual bool Check_Collision(SDL_Rect);
virtual bool Check_Collision(Shape&);
protected:
};
class Adv_Object : public Object
{
public:
Adv_Object(Shape *obj);
virtual void Set_Shape(Shape* obj) { prec_area = obj; }
virtual bool Check_Collision(SDL_Point);
virtual bool Check_Collision(SDL_Rect);
virtual bool Check_Collision(Shape&);
protected:
Shape* prec_area; //Better Area Determination
};
其中Shape是一个纯抽象类,由另一个类继承,即:Circle。
class Circle : public Shape
{
public:
void Check_Collision(SDL_Point) override;
void Check_Collision(SDL_Rect) override;
void Check_Collision(Shape&) override;
};
当Circle被下cast为Shape时,会调用其虚函数的重载还是调用抽象函数?
程序将使用运行时信息(所谓的"虚表")来确定调用哪个虚函数。这将在完全不考虑向下/向上转换的情况下完成,换句话说-将调用正确的重载函数。
作为旁注——如果你真的想调用虚函数的特定"化身",那么你必须使用显式的名称解析,像这样:
Shape * c = new Circle;
c->Square::Check_Collision(...); // I hope you see the issues this maycause
相关文章:
- 如何使用Rcpp将R函数转换为C++函数
- C++函数转换为 C# 函数
- 将 C 函数转换为 C++ 以检查数字是否有效
- C++:从重载函数转换为 std::function
- 将 C 函数转换为C++语言
- C++隐式构造函数转换,后跟类型向上转换
- 将 lambda 函数转换为具有混合 lambda 引入器和参数列表的函子结构
- 通过 Boost Python 将 Python 函数转换为 C++,用作回调
- 如何将 MATLAB 图像处理库内置函数转换为 MATLAB 编码器代码生成不支持的 C++?
- 如何将函数转换为 lambda 函数
- 自定义函数转换错误?
- 将 C# 哈希函数转换为C++
- 将 lambda 函数转换为另一个编译单元中的普通函数会缩短编译时间吗?
- 加快 R 性能或将 R 函数转换为C++函数
- 将成员函数转换为指向成员函数的指针
- 将MATLAB炒作函数转换为C
- Rcpp - 用二进制函数转换数字向量?
- C lambda函数转换误差
- 此语法中的构造函数转换错误
- 将函数转换为find_if lambda