是否可以从基本 class 类型的子 class 调用方法?
Is It possible to call methods from a subclass from a base class type?
大家好,感谢阅读,
我刚开始使用 classes,我 运行 遇到了制作对象数组的问题,
我有一个基class,和一个相同类型的数组,我想知道是否有可能
制作基本 class 类型的 subclasses 并将它们放入数组中并调用不是的方法
在基础 class 中,如果这是一个糟糕的问题,我深表歉意,如果我的措辞不当,我深表歉意,
#include <iostream>
int main()
{
BaseClass* ObjectList[10];
ObjectList[0] = new SubClass;
ObjectList[0]->Load(10);
ObjectList[0]->OtherFunction(); // How Can I Do This?
return 0;
}
class BaseClass
{
public:
virtual void Load(int Num) = 0;
};
class SubClass : public BaseClass
{
void Load(int Num) override
{
std::cout << Num << std::flush;
}
void OtherFunction()
{
// Do Something
}
};
谢谢
编辑 -
我的意图是有一个简单的基础 class 和许多不同方法的子 classes,并有一个基础数组 class,
您必须将指针向下转换为真正的 class(或至少 class 具有该方法)。如果您不需要任何控制,您可以使用 static_cast
,如果您想要对演员进行 运行 时间验证,则可以使用 dynamic_cast
:
...
SubClass *psc = dynamic_cast<SubClass *>(ObjectList[0]);
if (psc != nullptr) { // an invalid cast would set it to NULL
psc->OtherFunction();
}
else {
// process the error
}
您始终可以拥有多个指向同一对象的指针(或引用)。
int main()
{
BaseClass* ObjectList[10];
SubClass TheSubclass;
ObjectList[0] = &TheSubclass;
ObjectList[0]->Load(10); // presumably in a loop
TheSubclass.OtherFunction();
return 0;
}
大家好,感谢阅读, 我刚开始使用 classes,我 运行 遇到了制作对象数组的问题, 我有一个基class,和一个相同类型的数组,我想知道是否有可能 制作基本 class 类型的 subclasses 并将它们放入数组中并调用不是的方法 在基础 class 中,如果这是一个糟糕的问题,我深表歉意,如果我的措辞不当,我深表歉意,
#include <iostream>
int main()
{
BaseClass* ObjectList[10];
ObjectList[0] = new SubClass;
ObjectList[0]->Load(10);
ObjectList[0]->OtherFunction(); // How Can I Do This?
return 0;
}
class BaseClass
{
public:
virtual void Load(int Num) = 0;
};
class SubClass : public BaseClass
{
void Load(int Num) override
{
std::cout << Num << std::flush;
}
void OtherFunction()
{
// Do Something
}
};
谢谢
编辑 - 我的意图是有一个简单的基础 class 和许多不同方法的子 classes,并有一个基础数组 class,
您必须将指针向下转换为真正的 class(或至少 class 具有该方法)。如果您不需要任何控制,您可以使用 static_cast
,如果您想要对演员进行 运行 时间验证,则可以使用 dynamic_cast
:
...
SubClass *psc = dynamic_cast<SubClass *>(ObjectList[0]);
if (psc != nullptr) { // an invalid cast would set it to NULL
psc->OtherFunction();
}
else {
// process the error
}
您始终可以拥有多个指向同一对象的指针(或引用)。
int main()
{
BaseClass* ObjectList[10];
SubClass TheSubclass;
ObjectList[0] = &TheSubclass;
ObjectList[0]->Load(10); // presumably in a loop
TheSubclass.OtherFunction();
return 0;
}