当前位置:   article > 正文

C++学习——类和对象

C++学习——类和对象

C++学习——深入理解类和对象

作为一个资深的C++学习者,我将带你深入探讨类和对象的基本知识,以及一些高级的概念和应用。在这篇博文中,我将从类的访问控制开始,逐步展开对拷贝构造函数和友元函数的讨论。

1. 类的访问控制

在C++中,类的成员可以有不同的访问控制,主要有三种:公有(public)、私有(private)和保护(protected)。这些访问控制关键字用于定义成员的可见性和访问权限。

  • 公有成员(public): 以关键字 public 指明的成员是类对外公开的,可以在类的外部访问。这意味着任何人都可以访问这些成员。
  • 私有成员(private): 以关键字 private 指明的成员是类的私有成员,只能在类的内部访问。外部代码无法直接访问私有成员。
  • 保护成员(protected): 以关键字 protected 指明的成员对于类的继承有特殊意义,只能在类的内部和派生类中访问。外部代码通常无法访问保护成员。

这些访问控制关键字允许我们封装类的实现细节,并控制哪些成员可以公开访问。

2. 拷贝构造函数

拷贝构造函数是一个特殊的成员函数,它的作用是用一个已经存在的对象初始化本类的新对象。通常情况下,它被用于创建对象的副本。拷贝构造函数的定义如下:

ClassName(const ClassName &source);
  • 1

其中,ClassName 是类的名称,source 是要拷贝的对象。

拷贝构造函数在许多情况下都非常有用,例如当你需要复制对象以进行修改,或者在函数参数传递中。

3. 友元函数和友元类

友元函数和友元类提供了一种特殊的机制,允许不同类或对象的成员函数之间、类的成员函数与一般函数之间进行数据共享。这意味着友元函数或友元类可以访问其他类中通常隐藏的信息,包括私有成员和保护成员。

  • 友元函数(Friend Functions): 友元函数是一个在类外部声明的函数,但被标记为某个类的友元。这意味着友元函数可以访问该类的私有成员和保护成员。友元函数的声明使用 friend 关键字。

    class MyClass {
    private:
        int privateData;
    public:
        friend void friendFunction(MyClass obj);
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 友元类(Friend Classes): 友元类是一个类可以访问另一个类的私有成员和保护成员。这通常用于建立紧密相关的类之间的关系。友元类的声明同样使用 friend 关键字。

    class MyClass {
    private:
        int privateData;
        friend class FriendClass;
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5

友元函数和友元类的使用需要小心谨慎,因为它们破坏了封装性。通常情况下,应该首选使用类的成员函数和访问器来访问类的成员。

这些是C++中类和对象的基本知识,以及一些高级概念。通过掌握这些概念,你可以更好地理解和设计C++程序,实现数据封装和代码重用。如果你对这些概念有任何疑问或需要更多示例,请随时提问。

代码案例:学生管理系统示例

当涉及深度的综合示例时,我们可以考虑一个简化的学生管理系统。这个系统将涵盖类和对象的基本知识,包括类的访问控制、拷贝构造函数以及友元函数的使用。

首先,我们定义一个 Student 类来表示学生信息,包括姓名、学号和成绩。然后,我们将创建一个 StudentDatabase 类,它充当学生信息的数据库。

#include <iostream>
#include <string>

class Student {
private:
    std::string name;
    int rollNumber;
    double grade;

public:
    Student(const std::string& n, int r, double g) : name(n), rollNumber(r), grade(g) {}

    // 友元函数,用于访问私有成员
    friend class StudentDatabase;
};

class StudentDatabase {
public:
    void displayStudentInfo(const Student& student) {
        std::cout << "Name: " << student.name << std::endl;
        std::cout << "Roll Number: " << student.rollNumber << std::endl;
        std::cout << "Grade: " << student.grade << std::endl;
    }
};

int main() {
    Student student1("Alice", 101, 95.5);
    Student student2("Bob", 102, 88.0);

    StudentDatabase database;

    std::cout << "Student 1 Information:" << std::endl;
    database.displayStudentInfo(student1);

    std::cout << "\nStudent 2 Information:" << std::endl;
    database.displayStudentInfo(student2);

    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

这个示例演示了以下概念和深度:

  1. 类的访问控制:Student 类中,namerollNumbergrade 成员是私有的,只能通过友元函数 StudentDatabase 访问。
  2. 拷贝构造函数: 在这个示例中,我们没有显式定义拷贝构造函数,但C++会提供默认的拷贝构造函数来处理对象的复制。当 student1student2 对象传递给 displayStudentInfo 时,这些对象会被复制,这涉及到拷贝构造函数的调用。
  3. 友元函数: displayStudentInfo 函数是一个友元函数,允许它访问 Student 类的私有成员。这在展示学生信息时非常有用。

这个示例是一个简化的学生管理系统,但涵盖了类和对象的基本概念,同时深入了解了访问控制、拷贝构造函数和友元函数。通过类和对象,我们可以更好地组织和管理数据,实现高内聚和低耦合的代码。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/52716
推荐阅读
相关标签
  

闽ICP备14008679号