C++深入讲解类与对象之OOP面向对象编程与封装

C++深入讲解类与对象之OOP面向对象编程与封装攻略

什么是OOP面向对象编程?

OOP,全名是Object-Oriented Programming,中文翻译是面向对象编程,它是一种编程方法论和编程思想,其核心思想是将一组数据结构和处理它们的方法组成对象,以及描述对象间的相互关系,实现数据封装,代码重用和灵活性等特性。

OOP面向对象编程实现了三个基本特性:封装、继承和多态。通过这些特性,OOP提供了一种更加清晰、灵活和易于维护的编程方式。

在C++中,我们可以使用类和对象实现面向对象编程。

什么是类与对象?

在C++中,类被用来描述相似的对象,而对象表示类的实例。类可以被看作是一种模板,用于创建对象。从一个类可以创建一个或多个对象。

类由以下部分组成:

  • 成员变量:用于表示对象的各种属性。
  • 成员函数:用于完成对对象的各种操作。

对象是类的一个实例。当定义一个类时,只是定义了一个模板,而对象是根据这个模板创建的,包含实际的数据。

封装

封装是OOP的一个重要特性,它将数据和行为组合在一起,形成一个有机的整体。封装隐藏了对象内部的复杂性,使得在外部只能访问对象的公共成员函数,而不能访问其私有成员变量和函数。

在C++中,我们使用关键字privatepublic来封装类的成员变量和成员函数。其中private表示私有成员,只能在类内访问,而public表示公共成员,可以在类内和类外访问。

下面是一个封装示例:

#include <iostream>

using namespace std;

class Students {
private:
    string name;
    int age;

public:
    void setName(string s) {
        name = s;
    }

    void setAge(int a) {
        age = a;
    }

    string getName() {
        return name;
    }

    int getAge() {
        return age;
    }
};

int main() {

    Students john;
    john.setName("John");
    john.setAge(20);

    cout << "Name: " << john.getName() << endl;
    cout << "Age: " << john.getAge() << endl;

    return 0;
}

在上面的示例中,我们定义了一个Students类,并将其成员变量nameage标记为私有变量,这样外部无法直接访问这两个变量。然后,我们定义了四个成员函数setNamesetAgegetNamegetAge,分别用来设置和获取nameage的值,并将其标记为公共成员,这样外部可以通过这四个函数访问类的私有成员变量。最后,在main函数中,我们实例化了一个对象john,并使用setNamesetAge函数分别设置其名字和年龄,并使用getNamegetAge函数来获取其名字和年龄并输出。

继承

继承是OOP的另一个重要特性,它允许我们在一个已存在的类的基础上构建一个新的类。新的类被称为派生类,已存在的类被称为基类。派生类继承了基类的所有成员,包括成员变量和成员函数,并可以添加新的成员。

在C++中,我们使用关键字class:来定义派生类,:后面的公共、保护和私有用来指定成员的访问级别,公共成员在派生类和外部都可以访问,保护成员在派生类中可以访问,但在派生类外部无法访问,私有成员在派生类和外部都无法访问。

下面是一个继承示例:

#include <iostream>

using namespace std;

class Person {
protected:
    string name;
    int age;

public:
    void setName(string s) {
        name = s;
    }

    void setAge(int a) {
        age = a;
    }

    string getName() {
        return name;
    }

    int getAge() {
        return age;
    }
};

class Student : public Person {
private:
    int score;

public:
    void setScore(int s) {
        score = s;
    }

    int getScore() {
        return score;
    }
};

int main() {

    Student john;
    john.setName("John");
    john.setAge(20);
    john.setScore(90);

    cout << "Name: " << john.getName() << endl;
    cout << "Age: " << john.getAge() << endl;
    cout << "Score: " << john.getScore() << endl;

    return 0;
}

在上面的示例中,我们定义了一个基类Person,派生类Student继承了基类Person的所有成员,包括成员变量nameage以及成员函数setNamesetAgegetNamegetAge,并添加了一个成员变量score以及成员函数setScoregetScore。在main函数中,我们实例化了一个对象john,并使用setNamesetAgesetScore函数分别设置其名字、年龄和分数,并使用getNamegetAgegetScore函数来获取其名字、年龄和分数并输出。

总结

本文介绍了C++中面向对象编程的基本概念,包括类、对象、封装和继承。通过示例代码,演示了如何使用C++实现面向对象编程中的封装和继承,希望读者能够了解并掌握面向对象编程的基本思想和C++中的面向对象编程的基本语法。

示例1:https://github.com/Sherlen/weblearn/tree/main/Cplusplus/oop_encapsulation

示例2:https://github.com/Sherlen/weblearn/tree/main/Cplusplus/oop_inheritance

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++深入讲解类与对象之OOP面向对象编程与封装 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • C++实现企业职工工资管理系统

    C++实现企业职工工资管理系统 思路概述 企业职工工资管理系统是一个典型的信息管理系统,它主要是通过管理系统对组织内职工的工资情况进行管理。本文将通过C++语言实现该系统,包括职工信息管理和工资管理两个功能模块。 在职工信息管理模块中,我们将定义一个员工类来保存每个员工的基本信息(工号、姓名、性别、年龄)并提供添加、删除、修改、查询和显示所有员工的方法。在工…

    C 2023年5月23日
    00
  • C++成员函数如何当作回调函数同时传递this指针

    要将一个C++对象的成员函数作为回调函数并传递对象的this指针,需要使用函数对象和函数指针的技巧。下面分步骤介绍: 1. 定义函数对象 首先定义一个函数对象类,这个类中定义了一个成员函数指针和一个指向对象的指针。这个类将被用于封装成员函数以便传递给其他函数。 class Foo { public: typedef void (Foo::*Callback)…

    C 2023年5月23日
    00
  • C++面向对象实现五子棋小游戏

    C++面向对象实现五子棋小游戏攻略 A. 概述 本文将介绍如何通过C++面向对象的方式实现五子棋小游戏。本文的重点是通过面向对象的分析和设计,呈现出一个完整的OOP编程流程。具体的实现代码在这里不赘述,通过项目开发过程中的分析和设计,读者可以获得更为重要的启发。 B. 项目分析 1. 确定项目需求 我们首先需要确定实现五子棋小游戏(Gobang)需要满足的核…

    C 2023年5月22日
    00
  • 详解JS变量存储深拷贝和浅拷贝

    详解JS变量存储深拷贝和浅拷贝 什么是拷贝? 拷贝是将原来的变量复制一份新的变量,使得新的变量与原变量相互独立,对新的变量的修改不会对原变量产生任何影响。 浅拷贝 在 JS 中,浅拷贝指的是将原始对象的引用复制给新的对象,如果原始对象发生变化,则新对象也会随之发生变化。示例如下: const originalObj = { a: { b: 1 }, c: 2…

    C 2023年5月23日
    00
  • C语言 if-else语句

    下面详细讲解一下C语言中if-else语句的完整使用攻略。 一、if-else语句 if-else语句是C语言中最基本的条件判断语句,用来根据条件来决定执行不同的语句。if语句用于判断条件是否成立,如果成立则执行if后面的语句,否则执行else后面的语句。 语法格式: if (condition) { // 如果条件成立,执行这里的语句 } else { /…

    C 2023年5月9日
    00
  • CCleaner Pro怎么激活?CCleaner专业版注册破解激活教程(附下载)

    CCleaner Pro激活攻略 1. 下载CCleaner专业版安装文件 首先,你需要下载CCleaner专业版安装文件。你可以在官方网站上下载安装文件,也可以在其他下载站点上下载。注意,要下载专业版,而不是免费版。 下载完成后,双击安装文件并按照提示进行安装。 2. 获取CCleaner专业版注册码 在你安装CCleaner专业版后,你将需要注册码来激活…

    C 2023年5月23日
    00
  • c++中c_str()的用法示例

    下面是对于“c++中c_str()的用法示例”的完整攻略: 什么是c_str() c_str()是一个C++字符串类string的成员函数,用于将string类型字符串转换成C风格的字符串,即以’\0’结尾的字符数组。 c_str()函数的语法 c_str()函数的语法如下: const char* c_str() const noexcept; 该函数返回…

    C 2023年5月23日
    00
  • 使用C++和Direct3D (d3d)获取屏幕截图并根据传入分辨率进行缩放图片大小(最新推荐)

    这里提供一个使用C++和Direct3D (d3d)获取屏幕截图并根据传入分辨率进行缩放图片大小的攻略,具体步骤如下: 步骤1:初始化Direct3D 使用Direct3D获取屏幕截图需要初始化Direct3D,示例代码如下: // 引入Direct3D #include <d3d9.h> #pragma comment(lib, "d…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部