gpt4 book ai didi

c++ - 为什么 C++ 编译器不能知道指针指向派生类?

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

我刚刚开始学习 C++ 中的 OOP。我想知道为什么需要 virtual 关键字来指示编译器进行后期绑定(bind)?为什么编译器在编译时不知道指针指向派生类?

class A { 
public: int f() { return 'A';}
};

class B : public A {
public: int f() { return 'B';}
};

int main() {

A* pa;
B b;
pa = &b;
cout << pa->f() << endl;
}

最佳答案

关于在编译时不知道,通常情况下行为仅在运行时才知道。考虑这个例子

#include <iostream>

struct A {};
struct B : A {};
struct C : A {};

int main()
{
int x;
std::cin >> x;
A* a = x == 1 ? new B : new C;
}

在这个例子中,编译器如何知道 a将指向 B*C* ?它不能,因为行为取决于运行时值。

关于c++ - 为什么 C++ 编译器不能知道指针指向派生类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61954860/

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