我想知道是否我的父类(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的方法被调用。

这可能吗?

最佳答案

简短的回答:不,你不能。

长答案:在调用派生类构造函数之前,不会充实对象的虚拟表。在基类构造函数中,虚拟表指向函数的基类实现。如果基类具有实现,则将调用该函数。如果基类没有实现,则将发生平台相关的错误/异常。

10-08 11:07