gpt4 book ai didi

c++ - 与 C++ 中的指针相关的静态类型类

转载 作者:行者123 更新时间:2023-11-28 04:30:12 25 4
gpt4 key购买 nike

我对 C++ 中的静态和动态类型感到非常困惑。在下面的例子中,为什么 Account 指针被认为是静态的?

class Account{
public:
virtual string getType() { return "Generic Account"; };
};

class Current: public Account{
public:
virtual string getType() { return "Current Account"; };
};

class Deposit: public Account{
public:
virtual string getType() { return "Deposit Account"; };
};

int main()
{
// Note that all pointers have the static type Account
Account *a = new Account();
Account *b = new Current();
Account *c = new Deposit();

cout << "Pointer a Displayed: " << a->getType() << endl;
cout << "Pointer b Displayed: " << b->getType() << endl;
cout << "Pointer c Displayed: " << c->getType() << endl;
}

基类类型的指针都是静态的,派生类的指针都是动态的吗?例如,会

Current *d = new Deposit();

是动态的,因为它是派生类类型?提前致谢。

最佳答案

没有静态或动态指针这样的东西。但是有静态和动态类型


通常变量和表达式只有一种类型,也称为静态类型
多态类实例还具有动态类型

如果表达式引用位于派生类实例内部的基类实例,则表达式的动态类型就是该派生类。


一个例子应该清楚地说明这一点:

Account *a = new Account(); 
Account *b = new Current();
Account *c = new Deposit();

这里*a*b*c都有相同的静态类型——Account。静态类型不取决于这些指针指向什么,只取决于它们是如何声明的。

另一方面,*a*b*c 的动态类型是AccountCurrentDeposit。动态类型取决于指针实际指向的内容。

关于c++ - 与 C++ 中的指针相关的静态类型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53142392/

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