gpt4 book ai didi

c++ - 编译器如何实现C++继承?

转载 作者:行者123 更新时间:2023-12-03 09:27:27 26 4
gpt4 key购买 nike

C++ 支持继承。

但是它在编译器中是如何实现的呢?

编译器是否将所有实现从父级复制并粘贴到子级?

最佳答案

非常简单,如果我们谈论这样的事情:

class A 
{
public:
int func1() { do something; }
int func2() { do something; }
};

class B : public A
{
public:
int func2() { do somethign else; }
};

B b;

b.func1();

然后编译器内部发生的事情将是这样的(记住,这是非常简化的,我确信真正的编译器代码会复杂得多):

 ... fname = "func1" from the source code ... 
... object = "b";
function fn;
while (!(fn = find_func(object, fname)))
object = parent_object(object);
if (fn)
produce_call(fn);
else
print_error_not_found(fname);

如果我们谈论的是虚函数,那么编译器将生成一个表,其中保存各个虚函数的地址,并且该表是为每个类生成的,基于类似的“查找存在于其中的函数”的原理这个类或其父类之一)。

[在上面,我忽略了一个类可以有多个“父”类的事实 - 它不会改变事物的工作方式,只是代码必须维护一个“更多”的列表或数组同级别类(class)"]

关于c++ - 编译器如何实现C++继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17617139/

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