C++中的类与对象深度解析

C++中的类与对象深度解析

在C++中,类(class)是一种用户自定义的数据类型,它由数据成员和成员函数组成。类中的数据成员可以是各种类型,包括内置类型、自定义类型以及指针等,成员函数则是负责操作这些数据成员的函数。类可以看做是一种数据的集合和对这些数据的一些操作的封装。

类的定义

定义类的基本语法如下:

class 类名 {
    访问修饰符:
        数据成员声明
    访问修饰符:
        成员函数声明
};

其中,访问修饰符用于控制类的成员的访问权限,包括publicprivateprotected三种。

  • public:表示该成员可以被类的外部使用;
  • private:表示该成员只能被该类内部的成员函数以及友元函数使用;
  • protected:表示该成员可以被该类内部的成员函数、子类以及友元函数使用。

示例:

class Student {
public:
    int id;
    char name[20];

    void show() {
        cout << "id:" << id << endl;
        cout << "name:" << name << endl;
    }
};

上述代码定义了一个学生类,其中包含了成员变量 idname 以及成员函数 show()。因为 show() 函数在类的内部定义,所以可以直接访问类的内部成员变量。

类的实例化

类的实例化即创建该类的对象,也称为类的实例。通过实例化一个类,我们可以在程序中使用该类的数据成员和成员函数。

语法:

类名 对象名;

示例:

Student stu;
stu.id = 123;
strcpy(stu.name, "Tom");
stu.show();

该示例中,通过 Student 类实例化对象 stu,并给成员变量 id 赋值为123,name 赋值为 "Tom",最后调用 show() 函数输出结果。

构造函数和析构函数

构造函数(Constructor)是一种特殊的成员函数,它在对象创建时自动执行,用于初始化对象的成员变量的值。析构函数(Destructor)也是一种特殊的成员函数,它在对象销毁时自动执行,用于清理对象所占用的资源。

语法:

class 类名 {
public:
    类名();  // 构造函数
    ~类名();  // 析构函数
};

例如:

class Student {
public:
    Student(); // 构造函数
    ~Student(); // 析构函数

    int id;
    char name[20];

    void show() {
        cout << "id:" << id << endl;
        cout << "name:" << name << endl;
    }
};

Student::Student() {
    cout << "构造函数执行" << endl;
}

Student::~Student() {
    cout << "析构函数执行" << endl;
}

上述代码定义了构造函数和析构函数,并在两个特殊的成员函数中加了输出语句,以便在创建和销毁对象时显示相应的信息。

int main() {
    Student stu;
    stu.id = 123;
    strcpy(stu.name, "Tom");
    stu.show();

    return 0;
}

该示例中,创建 Student 类的实例对象时,构造函数会自动执行一次,并输出相应的提示信息。程序结束时,析构函数会自动执行一次,并同样输出相应的提示信息。

成员函数

成员函数是定义在类内部的函数,它和类的数据成员一样,是类的成员之一。成员函数是类的重要组成部分,它负责实现对类的操作,使得代码更加清晰易懂。

语法:

class 类名 {
public:
    返回类型 成员函数名(参数列表);
};

示例:

class Student {
public:
    int id;
    char name[20];

    void show() {
        cout << "id:" << id << endl;
        cout << "name:" << name << endl;
    }

    void set(int i, char *n) {
        id = i;
        strcpy(name, n);
    }
};

int main() {
    Student stu;
    stu.set(123, "Tom");
    stu.show();

    return 0;
}

上述代码中,我们为 Student 类添加了另外一个成员函数 set(),用于设置该学生的 idname。在 main() 函数中,我们通过调用 stuset() 函数来设置学生的信息。

友元函数和友元类

友元函数(Friend Functions)是和类有协作关系的函数,它可以访问该类的私有成员变量,但不是该类的成员函数。在很多情况下,我们需要将一些函数作为该类的友元函数,使得这些函数可以访问到该类的私有数据。

语法:

class 类名 {
    friend 返回类型 友元函数名(参数列表);
};

示例:

class Student {
public:
    Student() {
        age = 18;
    }

    int id;
    char name[20];

    friend void show_age(Student &stu) {
        cout << stu.age << endl;
    }

private:
    int age;
};

int main() {
    Student stu;
    show_age(stu);

    return 0;
}

上述代码中,我们为 Student 类添加了一个私有成员变量 age 和一个全局友元函数 show_age()。在 main() 函数中,通过调用 show_age() 函数输出 stuage 值。

友元类(Friend Classes)是可以访问到该类的私有成员变量的类。在很多情况下,我们需要将某些类作为该类的友元类,使得这些类可以访问到该类的私有数据,从而增加程序的安全性。

语法:

friend class 友元类名;

示例:

class Student {
public:
    Student() {
        age = 18;
    }

    int id;
    char name[20];

    friend class Teacher;

private:
    int age;
};

class Teacher {
public:
    void show_age(Student &stu) {
        cout << stu.age << endl;
    }
};

int main() {
    Student stu;
    Teacher tea;
    tea.show_age(stu);

    return 0;
}

上述代码中,我们为 Student 类添加了一个私有成员变量 age 和一个友元类 Teacher。在 Teacher 类中,我们实现了一个成员函数 show_age(),该函数可以访问到 Student 类的私有数据 age。在 main() 函数中,通过调用 show_age() 函数输出 stuage 值。

总结

本文介绍了C++中的类与对象的基本概念,以及类的定义、实例化、构造函数、析构函数、成员函数、友元函数和友元类的使用方法。在C++编程中,类和对象是十分重要的概念,掌握好这些概念可以使得程序设计更加简洁、清晰,并提高程序的安全性和可维护性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中的类与对象深度解析 - Python技术站

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

相关文章

  • C语言菜鸟基础教程之Hello World

    C语言菜鸟基础教程之Hello World 什么是C语言? C语言是一种通用的高级程序设计语言,它能够方便地对计算机进行底层操作,如硬件控制和内存访问等。同时由于其简洁、高效和强大的特性,C语言在操作系统、编译器、游戏开发等领域得到了广泛的应用。 Hello World实例 下面以经典的Hello World程序为例,让我们一步步地学习如何使用C语言进行编程…

    C 2023年5月23日
    00
  • C语言关于include顺序不同导致编译结果不同的问题

    C语言中,如果在一个源文件中对不同的头文件的include顺序不同,有可能会导致编译结果不同的问题。 这个问题一般是由于在头文件中使用了宏定义引入其他头文件导致的,而不是因为头文件中的函数或变量重复定义所导致的。 在解决这个问题时,可以采取以下步骤: 尽可能在头文件中使用前置声明避免include其他头文件,只有在真正需要时再include其他头文件。 对于…

    C 2023年5月23日
    00
  • C程序 打印倒置金字塔

    下面是关于“C程序 打印倒置金字塔”的完整使用攻略。 1. 程序简介 这个C程序的功能是在命令行上打印出一个倒置的金字塔,金字塔的高度由用户输入。例如,当用户输入数字5时,程序将输出以下金字塔形状: ********* ******* ***** *** * 2. 程序使用方式 在你的计算机上创建一个C源文件,例如pyramid.c。 在文件中写入以下代码:…

    C 2023年5月9日
    00
  • 计算机程序设计并行计算概念及定义全面详解

    “计算机程序设计并行计算概念及定义全面详解”的攻略如下: 什么是并行计算? 在了解并行计算之前,需要先了解串行计算。串行计算是指计算机单个处理器按照预设的顺序执行一系列的计算任务,每个任务必须执行完后才能进行下一个任务,这是一种逐个计算的方式。而并行计算是指通过多个处理器同时执行相互独立的任务,并通过协调来完成计算任务,是一种多任务同时进行的计算方式。相对于…

    C 2023年5月23日
    00
  • 邻接表无向图的Java语言实现完整源码

    如果要实现一个邻接表无向图的Java程序,需要进行以下几个步骤: 1. 定义节点类 首先定义一个节点类来存储图中的每个节点以及它们之间的关系(边): class Node { int label; // 节点编号 List<Node> edges = new LinkedList<>(); // 存储与该节点相连的边 Node(int…

    C 2023年5月22日
    00
  • C#简单快速的json组件fastJSON使用介绍

    C#简单快速的json组件fastJSON使用介绍 简介 fastJSON是一个快速、小巧且易于使用的JSON序列化和反序列化库,与JSON.NET等流行的JSON库相比,在一些简单的场景下,fastJSON可以提供更高的性能。fastJSON支持将任何.NET对象序列化为JSON字符串,同时还支持将JSON字符串反序列化为.NET对象。 安装 使用NuGe…

    C 2023年5月23日
    00
  • 一文带你了解Rust是如何处理错误的

    一文带你了解Rust是如何处理错误的 在Rust中,错误是一等公民。这意味着Rust程序员需要显式地处理错误,不能将错误掩盖或忽略掉。这篇文章将介绍Rust中的错误处理方式。 错误类型 在Rust中,错误类型通常是实现了标准库中的std::error::Errortrait的结构体。这个trait有两个方法:description 和 cause,分别用于返…

    C 2023年5月23日
    00
  • C程序读取键盘码的方法

    C程序要想读取键盘码有以下几种方法: 使用getc()函数读取单个字符 可以使用stdlib.h库中的getc()函数来读取单个字符。 int getc(FILE *stream); 这个函数可以从指定的流中读取下一个字符,可以从键盘输入流stdin中读取字符。 示例1:下面这个程序可以读取用户从键盘输入的字符,并将其输出到屏幕上。 #include &lt…

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