gpt4 book ai didi

c++ - 如何在base的构造函数中从基类方法调用派生类方法

转载 作者:太空宇宙 更新时间:2023-11-04 15:53:39 25 4
gpt4 key购买 nike

我想知道是否可以从基本构造函数调用的函数中调用派生类的函数(在执行括号中的代码时,它不应该已经创建了吗?)

#pragma once
class ClassA
{
public:
ClassA(void);
virtual ~ClassA(void);

void Init();

protected:
short m_a;
short m_b;

virtual void SetNumbers(short s);
};

include "ClassA.h"
#include <iostream>


ClassA::ClassA(void) : m_a(0), m_b(0)
{
Init();
}


ClassA::~ClassA(void)
{
}

void ClassA::SetNumbers(short s)
{
std::cout << "In ClassA::SetNumbers()\n";
m_a = s;
m_b = s;
}

void ClassA::Init()
{
this->SetNumbers(2);
}

#pragma once
#include "ClassA.h"
class ClassB : public ClassA
{
public:
ClassB(void);
virtual ~ClassB(void);

virtual void SetNumbers(short);

int x;
};

#include "ClassB.h"
#include <iostream>


ClassB::ClassB(void)
{
}


ClassB::~ClassB(void)
{
}

void ClassB::SetNumbers(short s)
{
std::cout << "In ClassB::SetNumbers()\n";

m_a = ++s;
m_b = s;

ClassA::SetNumbers(s);
}

有什么建议吗?...

提前谢谢你:)...

最佳答案

没有。 B 的所有部分(从 A 开始,因为它是基础)在调用 B 的构造函数之前构造。因此,在 SetNumbers 被调用时,B 的任何部分(除了 A 部分)都没有被构造——并且可能包括 v 表,所以没有办法知道它在哪里通话即将结束。

当然,有一个简单的解决方案:从 B 的构造函数中调用 B::SetNumber()(毕竟这是 B 的构造函数的目的)

关于c++ - 如何在base的构造函数中从基类方法调用派生类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3515675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com