我想知道是否我的父类(super class)可以调用子类的函数initValues()而不必重写构造函数?
这是代码:
#ifndef VECTOR_MATH_H
#define VECTOR_MATH_H
#include "GL\glew.h"
#include <iostream>
namespace Math3d
{
class Vector
{
public:
Vector(int length=2) : v(new float[length]) { initValues(); }
~Vector() { delete[] v; }
protected:
virtual void initValues()
{
std::cout << "Vector" << std::endl;
}
float* v;
};
class Vector3 : public Vector
{
public:
protected:
void initValues()
{
std::cout << "Vector3" << std::endl;
}
};
}
#endif
然后,我创建一个像这样的变量:
Vector3 vec;
然后我想
initValues()
子类Vector3的方法被调用。
这可能吗?
最佳答案
简短的回答:不,你不能。
长答案:在调用派生类构造函数之前,不会充实对象的虚拟表。在基类构造函数中,虚拟表指向函数的基类实现。如果基类具有实现,则将调用该函数。如果基类没有实现,则将发生平台相关的错误/异常。