初步认识C++面向对象和类

2024-05-28 1466阅读

初步认识面向对象及类的引入

  • 前言
  • 一、面向过程和面向对象初步认识
    • 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语言结构体中只能定义变量,在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 
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]