gpt4 book ai didi

c++ - 纯虚函数,它是如何工作的

转载 作者:太空宇宙 更新时间:2023-11-04 12:08:19 24 4
gpt4 key购买 nike

我有一个关于纯虚函数的问题。我不清楚它是如何工作的以及我们什么时候需要使用纯虚函数。这是我不明白的例子:

file.h

class A
{
public :
A();
~A();

virtual void func1(void) = 0;
virtual UINT32 func2(void) = 0;
UINT32 initialize(void) = 0;
}


file.cpp

UINT32 A:initialize (void)
{
func1();
func2();
return (result);
}

任何人都可以详细解释这个例子实际上做了什么以及结果是什么?我真的很感谢你的帮助和知识。非常感谢。

最佳答案

(注意,initialize()的声明不应该是虚函数,initialize()的实现应该返回func2()可能。因为这是一个例子,initialize() 做什么并不重要,但它应该正确编译。)

虚函数的主要目的是实现多态。

A 定义了两个纯虚方法,initialize 调用了它们。这允许程序中的代码在不知道子类的情况下初始化类型为 A 的东西。 A 可能有很多子类,并且每个子类在 func1()func2() 中做的事情可能略有不同。由于只知道A的代码有时会通过A初始化不同类型的对象,所以A可以称为多态类型。

class B : public A {
void func1 () { std::cout << "B::func1" << std::endl; }
UINT32 func2 () { return 1; }
};

class C : public A {
void func1 () { std::cout << "C::func1" << std::endl; }
UINT32 func2 () { return 2; }
};

void call_initialize (A *a) {
std::cout << a->initialize() << std::endl;
}

B b;
C c;
call_initialize(&b);
call_initialize(&c);

输出结果:

B::func1
1
C::func1
2

这是一个多态行为的例子,因为输出是不同的,这取决于 AB 还是 C 的子类。

关于c++ - 纯虚函数,它是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10990022/

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