C++中类和对象的多态性及其基本语法讲解

简介: C++中类和对象的多态性及其基本语法讲解

在C++中,多态性是面向对象编程的三大特性之一,它允许我们使用父类类型的指针或引用来调用子类的成员函数。多态性主要分为两种:编译时多态(通过函数重载和模板实现)和运行时多态(通过虚函数和指针或引用实现)。这里我们主要讨论运行时多态,它通常涉及到虚函数和动态绑定。

 

1. 虚函数

虚函数是C++中实现多态性的关键。当基类中的成员函数被声明为虚函数时,派生类可以重写该函数。在运行时,程序会根据对象的实际类型(而不是指针或引用的类型)来调用正确的函数。

 

示例代码:

image.png

image.png

讲解:

Shape 类中声明了一个虚函数 draw,这意味着 Shape 的派生类可以重写这个函数。

Circle 和 Rectangle 类继承了 Shape 类,并各自重写了 draw 函数。

drawShapes 函数接受一个 Shape 指针数组,并调用每个指针的 draw 函数。由于 draw 是虚函数,这里实际调用的是指针所指向对象的 draw 函数实现,即多态性发生。

main 函数中创建了 Circle 和 Rectangle 的对象,并将它们的地址存储在 shapes 数组中。然后调用 drawShapes 函数来绘制这些形状。

注意,当我们使用动态分配的对象时(如本例中的 new 操作符),必须在不再需要这些对象时显式释放它们(使用 delete 操作符)。否则会导致内存泄漏。

2. 纯虚函数和抽象类

如果一个类包含纯虚函数,那么这个类就是抽象类。抽象类不能被实例化,通常用作接口,定义一组需要由派生类实现的操作。

 

示例代码:

image.png

讲解:

AbstractShape 类中声明了一个纯虚函数 draw,由于 = 0 的存在,AbstractShape 成为一个抽象类。

Circle 类继承了 AbstractShape 并提供了 draw 函数的实现。

在 main 函数中,我们不能直接实例化 AbstractShape,因为它是一个抽象类。但我们可以实例化 Circle,因为 Circle 提供了所有纯虚函数的实现。

通过

目录
相关文章
|
2月前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
1月前
|
编译器 C++
类和对象(中 )C++
本文详细讲解了C++中的默认成员函数,包括构造函数、析构函数、拷贝构造函数、赋值运算符重载和取地址运算符重载等内容。重点分析了各函数的特点、使用场景及相互关系,如构造函数的主要任务是初始化对象,而非创建空间;析构函数用于清理资源;拷贝构造与赋值运算符的区别在于前者用于创建新对象,后者用于已存在的对象赋值。同时,文章还探讨了运算符重载的规则及其应用场景,并通过实例加深理解。最后强调,若类中存在资源管理,需显式定义拷贝构造和赋值运算符以避免浅拷贝问题。
|
1月前
|
存储 编译器 C++
类和对象(上)(C++)
本篇内容主要讲解了C++中类的相关知识,包括类的定义、实例化及this指针的作用。详细说明了类的定义格式、成员函数默认为inline、访问限定符(public、protected、private)的使用规则,以及class与struct的区别。同时分析了类实例化的概念,对象大小的计算规则和内存对齐原则。最后介绍了this指针的工作机制,解释了成员函数如何通过隐含的this指针区分不同对象的数据。这些知识点帮助我们更好地理解C++中类的封装性和对象的实现原理。
|
2月前
|
编译器 C语言 C++
类和对象的简述(c++篇)
类和对象的简述(c++篇)
|
2月前
|
编译器 C语言 C++
☺初识c++(语法篇)☺
☺初识c++(语法篇)☺
|
1月前
|
编译器 C++
类和对象(下)C++
本内容主要讲解C++中的初始化列表、类型转换、静态成员、友元、内部类、匿名对象及对象拷贝时的编译器优化。初始化列表用于成员变量定义初始化,尤其对引用、const及无默认构造函数的类类型变量至关重要。类型转换中,`explicit`可禁用隐式转换。静态成员属类而非对象,受访问限定符约束。内部类是独立类,可增强封装性。匿名对象生命周期短,常用于临时场景。编译器会优化对象拷贝以提高效率。最后,鼓励大家通过重复练习提升技能!
|
6月前
|
编译器 C++
C++之类与对象(完结撒花篇)(上)
C++之类与对象(完结撒花篇)(上)
62 0
|
3月前
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
116 19
|
2月前
|
安全 编译器 C语言
【C++篇】深度解析类与对象(中)
在上一篇博客中,我们学习了C++类与对象的基础内容。这一次,我们将深入探讨C++类的关键特性,包括构造函数、析构函数、拷贝构造函数、赋值运算符重载、以及取地址运算符的重载。这些内容是理解面向对象编程的关键,也帮助我们更好地掌握C++内存管理的细节和编码的高级技巧。
|
2月前
|
存储 程序员 C语言
【C++篇】深度解析类与对象(上)
在C++中,类和对象是面向对象编程的基础组成部分。通过类,程序员可以对现实世界的实体进行模拟和抽象。类的基本概念包括成员变量、成员函数、访问控制等。本篇博客将介绍C++类与对象的基础知识,为后续学习打下良好的基础。

热门文章

最新文章