gpt4 book ai didi

c++ - 以下是C++多态的例子吗?

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

我想获得以下 C++ 中的确切术语。

请考虑以下玩具示例:

class A{
public:
virtual void f(){ std::cout << "This is A" << std::endl; };
};

class B: public A{
public:
virtual void f(){ std::cout << "This is B" << std::endl; };
};

int main(int argc, char** argv){
A* ptr = new A(); //Base class pointer pointing to base class object
ptr->f(); //Base class method is called
delete ptr;
ptr = new B(); ////Base class pointer pointing to derived class object
ptr->f(); //Derived class method is called
delete ptr;
return 0;
}

输出是:这是一个这是B

我想知道这方面的确切 C++ 术语。是多态性还是方法覆盖还是其他?

最主要的是我使用的是基类指针。当指针指向基类对象时,调用基类方法。当它指向派生类对象时,将调用派生类方法,前提是该方法在两个类中都声明为虚拟的。

谢谢

最佳答案

它既是多态性又是方法覆盖:

多态性:(在编程中)为不同的底层形式(数据类型)呈现相同接口(interface)的能力。

Shape 类和所有可以从它继承的类(方形、圆形等)的示例。

方法覆盖: 它是一种语言功能,允许子类或子类提供其父类(super class)或父类之一已提供的方法的特定实现。

在您的例子中,BA 的特定形式(多态性)。 B 提供了已在基类中实现的方法 f() 的具体实现(方法覆盖)。


不是关于问题,而是你的代码泄漏了:

int main(int argc, char** argv)
{
A* ptr = new A(); //Base class pointer pointing to base class object
ptr->f(); //Base class method is called
delete ptr;
// ^^^^^^^^^^^
ptr = new B(); ////Base class pointer pointing to derived class object
ptr->f(); //Derived class method is called
delete ptr;
// ^^^^^^^^^^^
return 1;
// ^ Indicate that your program failed ?
}

不要忘记释放动态分配的内存。

如果可能的话,根本不要使用new/deleteHere是一种解释。

return 1; 表示你的程序也失败了。

关于c++ - 以下是C++多态的例子吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18574485/

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