gpt4 book ai didi

c++ - 初始化列表中的抽象类init

转载 作者:行者123 更新时间:2023-12-04 14:43:34 24 4
gpt4 key购买 nike

我想了解下面的c++概念。 class_a 是抽象类,根据抽象类的概念,我们不能创建它的任何实例。我也使用了初始化列表和抽象类,但从未使用过以下概念。在代码中,初始化了class_b、class_a的初始化列表。我想了解在初始化列表中初始化它是什么意思。

 class_b::class_b(int val):nameA::class_a()

在文件A.cpp中

namespace nameA
{
class class_a
{
public:
virtual ~class_a(){};
virtual void process()=0;
};
}

在fileb.h文件中

namespace nameB
{
class class_b : public nameA::class_a
{
public:
class_b(int val);
}
}

在fileb.cpp文件中

namespace nameB
{
class_b::class_b(int val)
:nameA::class_a() //Want to understand this line...
}

最佳答案

稍微丰富一点的例子会更清楚。因为如果抽象基类既没有属性也没有方法,那么很难看出它是如何初始化的。

class NamedProcessor {
std::string name; // a private attribute
public:
NamedProcessor(const std::string &name) : name(name) {}
virtual ~NamedProcessor() {}

// a pure virtual method to make the class abstract
virtual void process() = 0;

std::string getName() {
return name;
}
};

class Doubler : public NamedProcessor {
int value; // a private attribute

public:
Doubler(int initial = 1) : NamedProcessor("Doubler") {
reset(initial);
}

void reset(int initial) {
value = initial;
}

int getValue() {
return value;
}

// the concrete implementation
void process() {
value *= 2;
}
};

int main() {
// Compiler would croak witherror : variable type 'NamedProcessor' is an abstract class
// NamedProcessor wrong("Ill formed");

Doubler doubler;
std::cout << doubler.getName() << "\n"; // name has been initialized...
return 0;
}

这里的抽象类包含了一个子类可用的属性。而且这个属性必须在构造时设置,因为它没有公共(public) setter 。该语言必须提供一种方法来初始化抽象子类,这意味着不是构建一个对象,而是初始化一个子对象 - 这里设置名称。

关于c++ - 初始化列表中的抽象类init,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69476112/

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