gpt4 book ai didi

C++双指针多态性

转载 作者:搜寻专家 更新时间:2023-10-31 01:40:30 25 4
gpt4 key购买 nike

我正在尝试使用多态性创建一个指针数组。我将使父类(super class)的数组指向多个子类。无论如何这样做并且仍然使用子类中的方法吗?这是示例代码:

#include <iostream>


class Test1
{
public:
Test1()
: x(1)
{}
int get_x()
{
return x;
}
private:
int x;
};

class Test2 : public Test1
{
public:
Test2()
: y(2)
{}
void print()
{
std::cout << get_x() << ' ' << y << std::endl;
}
private:
int y;
};

class Test3 : public Test1
{
public:
Test3()
: y(3)
{}
void print()
{
std::cout << get_x() << ' ' << y << std::endl;
}
private:
int y;
};

int main()
{
Test1** test = new Test1*[2];
for (int i = 0; i < 2; i++)
{
if (i % 2 == 0)
{
test[i] = NULL;
test[i] = new Test2;
}
else
{
test[i] = NULL;
test[i] = new Test3;
}
}

test[0]->print(); // ERROR. Is this even possible?
test[1]->print(); // ERROR. Is this even possible?


return 0;
}

谢谢,我只编码了大约 8 个月。

最佳答案

test[0]->print(); // ERROR. Is this even possible?

一般来说,是的。但是,不适用于您的代码。

  1. 如果 Test1 将成为您的基类并且您将使用 new 那么它必须有一个虚拟析构函数(例如, 虚拟 ~Test1() {})
    • 在通过指向基类的指针删除派生类型时,这对于delete 正常工作是必要的
  2. 任何要使用指向基类的指针调用的函数都必须存在于基类中(即,您需要 Test1 中的 print 函数)
  3. 如果您希望派生类有自己的 print 实现,则必须在基类中将其声明为 virtual(例如,virtual void print( );)
    • 如果Test1 实现print 函数没有意义,那么它可以将其声明为纯虚拟 而不是提供一个实现(例如,virtual void print() = 0;)从而使其成为一个抽象

关于C++双指针多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29712650/

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