初步认识C++面向对象和类
初步认识面向对象及类的引入
- 前言
- 一、面向过程和面向对象初步认识
- C语言
- C++
- 二、类的引入
- C++的类名代表什么
- 示例
- C++与C语言的struct的比较
- 成员函数
- 访问权限
- 继承
- 默认构造函数
- 默认成员初始化
- 结构体大小
- 总结
前言
推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏网站,请点击下方链接查看。
https://www.captainbed.cn/f1
面向过程注重任务的流程和控制,适合简单任务和流程固定的场景;而面向对象则将数据和功能封装成对象,通过对象间的交互实现复杂功能,更适用于大型、复杂的软件系统开发。
类的引入是面向对象编程中的一个核心概念。通过类,我们可以创建具有相同属性和行为的对象,从而实现代码的重用和模块化。类定义了对象的结构和行为,包括对象的属性(数据成员)和方法(成员函数)。通过实例化类,我们可以创建对象,并赋予它们特定的属性值。这样,每个对象都具有独特的身份,但仍然共享类的定义和行为。类的引入使得代码更加组织化、可维护性和可扩展性,提高了软件开发效率和质量。
一、面向过程和面向对象初步认识
当我们开始接触编程时,首先遇到的两个核心概念便是面向过程(Procedural Programming)和面向对象(Object-Oriented Programming,简称OOP)。这两种编程范式各有其特点,并且在不同的应用场景中发挥着各自的优势。
面向过程编程,顾名思义,是以一系列按照特定顺序执行的过程或函数为核心来构建程序的。在这种编程范式中,程序员会定义一系列函数,每个函数负责完成特定的任务,然后通过一个主程序来调用这些函数,以实现特定的功能。面向过程编程的优点在于其直观性和简单性,特别适用于小规模、逻辑清晰的程序。然而,随着程序规模的扩大和复杂度的提升,面向过程编程的缺点也逐渐暴露出来,如代码重复、难以维护、可扩展性差等。
与面向过程编程不同,面向对象编程将现实世界中的事物抽象为对象,每个对象都拥有属性和方法。对象之间可以通过消息传递进行交互,从而实现复杂的功能。面向对象编程的核心概念包括类(Class)、对象(Object)、继承(Inheritance)、封装(Encapsulation)和多态(Polymorphism)。通过这些概念,面向对象编程能够更好地模拟现实世界,提高代码的可重用性、可维护性和可扩展性。
在实际应用中,面向过程和面向对象编程往往不是孤立的,而是相互补充的。对于某些特定的任务或模块,使用面向过程编程可能更加合适;而对于整个系统或大型项目,采用面向对象编程则能够更好地组织和管理代码。因此,作为程序员,我们需要根据具体的需求和场景来选择合适的编程范式,以达到最佳的开发效果。
C语言
C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
C++
C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。
二、类的引入
类的引入在编程中是一个核心概念,它允许我们创建具有相似属性和行为的对象集合。通过定义类,我们可以封装数据(属性)和功能(方法),从而创建出具有特定特性和行为的对象。这种封装不仅提高了代码的可读性和可维护性,还增强了代码的重用性。
C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。比如:之前在我之前用C语言写的数据结构的文章中,用C语言方式实现的栈,结构体中只能定义变量;现在以C++方式实现,会发现struct中也可以定义函数。
总结:c++兼容C语言中的struct用法,但是c++将struct升级成了类
C++的类名代表什么
在C++中,类名代表了一种自定义的数据类型。类是一种用户定义的数据类型,可以封装数据和成员函数,以实现特定的功能。
类定义了一组数据成员和成员函数,用于描述对象的状态和行为。数据成员表示对象的属性和状态,而成员函数用于定义对象的行为和操作。
通过创建类的对象,我们可以实例化该类并使用类的成员函数来操作对象的数据。类提供了一种封装数据和功能的机制,使得代码可以更加模块化和可维护。
类名在C++中是用来标识该类的唯一标识符。通常按照一定的命名规范(如驼峰命名法)命名类名,以便于代码的可读性和可理解性。类名是用来声明类变量、创建对象和调用类的成员函数的重要标识符。
示例
在C语言中我们定义一个链表是按照下面的方式来定义的
typedef struct SListNode { SLTDataType data; struct SListNode* next; }SLTNode;在C++中定义一个链表却是按照下面这个方式来定义
struct SListNode { SLTDataType data; SListNode* next; };C++中的struct具有与类相同的能力,可以封装数据和成员函数。
C++与C语言的struct的比较
C++与C语言中的struct在定义和使用上有一些区别。
成员函数
C++的struct可以包含成员函数,而C语言的struct只能包含成员变量。
以下是一个使用C++中的struct定义一个包含成员函数的示例:
#include struct Person { //成员变量 std::string name; int age; //成员函数 void display() { std::cout Person p1; p1.name = "John"; p1.age = 25; p1.display(); return 0; } int age; }; void display() { …… }; std::string name; int age; void display() { std::cout Person p1; p1.name = "John"; p1.age = 25; p1.display(); return 0; } int age; }; struct Cat : public Animal { std::string name; }; int main() { Cat cat; cat.age = 3; cat.name = "Tom"; return 0; } int age; } Animal; typedef struct { Animal animal; char name[20]; } Cat; int main() { Cat cat; cat.animal.age = 3; strcpy(cat.name, "Tom"); return 0; } std::string name; int age; // 默认构造函数 Person() { name = "Unknown"; age = 0; } }; int main() { Person person; // 调用默认构造函数 std::cout char name[20]; int age; }; int main() { struct Person person = {"Unknown", 0}; // 手动赋初始值 printf("Name: %s\n", person.name); printf("Age: %d\n", person.age); return 0; } int width = 0; // 默认初始化为0 int height = 0; // 默认初始化为0 }; int main() { Rectangle rectangle; // 使用默认初始化值 std::cout int width; int height; }; int main() { struct Rectangle rectangle = {0, 0}; // 手动赋初始值 printf("Width: %d\n", rectangle.width); printf("Height: %d\n", rectangle.height); return 0; } int width; int height; }; int main() { struct Rectangle rectangle; printf("Size of Rectangle: %zu bytes\n", sizeof(rectangle)); return 0; } virtual void draw() { std::cout int width; int height; }; int main() { Rectangle rectangle; std::cout




