关于多态代码和运行结果

简介: #include #pragma hdrstop using std::cout; using std::endl; //--------------------------------------------------------------------------- #prag...
#include <iostream>
#pragma hdrstop
using std::cout;
using std::endl;
//---------------------------------------------------------------------------
#pragma argsused
//---------------------------------------------------------------------------
class Base {
public:
	Base() { };
	virtual void DisplayMessage() {
		cout << "Displaying Message from an object of Base class" << endl;
	};
};
//---------------------------------------------------------------------------
class DerivedFirst : public Base {
public:
	DerivedFirst() { };
	void DisplayMessage() {
		cout << "Displaying Message from an object of DerivedFirst class" << endl;
	}
};
//---------------------------------------------------------------------------
class DerivedSecond : public Base {
public:
	DerivedSecond() { };
	void DisplayMessage() {
		cout << "Displaying Message from an object of DerivedSecond class" << endl;
	}
};
//---------------------------------------------------------------------------
class DerivedThird : public Base {
public:
	DerivedThird() { };
};
//---------------------------------------------------------------------------
int main()
{
	// create a base class object
	Base* bc = new Base();
	bc->DisplayMessage();
	// delete the base class object and assign it to DerivedFirst object
	delete bc;
	bc = new DerivedFirst();
	bc->DisplayMessage();
	// delete the base class object and assign it to DerivedSecond object
	delete bc;
	bc = new DerivedSecond();
	bc->DisplayMessage();
	// delete the base class object and assign it to DerivedThird object
	delete bc;
	bc = new DerivedThird();
	bc->DisplayMessage();
	delete bc;
	return EXIT_SUCCESS;
}
//---------------------------------------------------------------------------

img_0e6ab4dbdff3aa83ee7cbd4bcd27034e.jpg

函数主要作用:用基类声明的指针(Base* bc),指向派生类,如果派生类中有与基类中相同的方面就调用子类的方法,如果子类没有该方面,就调用基类自身的方法。
基类中如果不加virtual 关键字,用用基类声明的指针,调用函数时只能调用基类自身的函数。

相关文章
|
存储 Cloud Native 编译器
C++编译期多态与运行期多态
C++编译期多态与运行期多态
|
2月前
实现多态的多种方式
【10月更文挑战第19天】这些多态的实现方式各有特点,在不同的场景中可以灵活运用,以提高代码的灵活性、可扩展性和复用性。
107 63
|
7月前
|
Python
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
85 0
|
7月前
|
数据库 Python
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(下)
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)
81 0
面试题:多态是编译时行为还是运行时行为?
面试题:多态是编译时行为还是运行时行为?
73 0
|
Python
Python封装、继承、多态、拷贝
Python封装、继承、多态、拷贝
71 0
|
设计模式
代码学习-多态
代码学习-多态
61 0
|
Python
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(中)
## 封装,继承和多态 ## 1.封装 1、满足把内容封装到某个地方,另一个地方去调用封装的内容 2、使用初始化构造方法,或者使用self获取封装的内容 ## 2.继承 子类继承父类的属性和内容
137 0