C++零基础教程(C++中的类)

简介: C++零基础教程(C++中的类)

前言

一、概念介绍

在C++中,类是一种用户自定义的数据类型,用于封装相关的数据和功能。类提供了一种面向对象的编程方式,允许将数据和对数据的操作封装在一个实体中,称为对象。下面是一些关于C++类的主要概念:

1.数据成员(Data Members):类的数据成员是用于存储对象的数据的变量或属性。这些成员可以是任何C++数据类型,包括基本类型(如整数、浮点数、字符等)或其他用户定义的类类型。数据成员定义了对象的状态或属性。

2.成员函数(Member Functions):类中的成员函数是类的行为或操作。它们提供了操作类对象的接口,可以访问和修改数据成员。成员函数也被称为方法。成员函数可以在类内部定义,也可以在类外部定义。

3.访问控制(Access Control):C++中的类提供了三种访问控制修饰符:public、private 和 protected。public 成员可以从类的外部访问,private 成员只能在类的内部访问,而 protected 成员可以在类的内部和派生类中访问。通过访问控制,可以控制类中的成员对外部的可见性和可访问性。

4.构造函数(Constructor):构造函数是一种特殊的成员函数,用于初始化对象的状态。它们在创建对象时自动调用,并可以接受参数来设置对象的初始值。类可以有多个构造函数,它们可以根据不同的参数列表进行重载。

5.析构函数(Destructor):析构函数是类的特殊成员函数,用于在对象生命周期结束时进行清理工作。它们在对象被销毁时自动调用,通常用于释放动态分配的资源,如内存、文件句柄等。

6.对象实例化(Object Instantiation):类定义了一种对象的蓝图,通过实例化创建类的对象。可以使用类名加上括号的方式进行对象的实例化。例如,ClassName objectName;,它将创建一个名为 objectName 的类对象。

7.继承(Inheritance):继承是面向对象编程的重要概念之一,它允许类从其他类派生出来,建立起类之间的层次关系。派生类(子类)可以继承基类(父类)的数据和成员函数,并且可以添加自己的特定功能。继承可以实现代码的重用和层次化的组织。

8.封装(Encapsulation):封装是面向对象编程的基本原则之一,它将数据和操作数据的方法封装在一个实体中,限制对数据的直接访问。通过封装,类可以隐藏内部细节,并提供公共接口以便与其他代码进行交互。

类是C++中面向对象编程的核心概念之一,它提供了一种结构化代码、重用性和灵活性的方式来组织和管理数据和行为。通过类的定义,可以创建多个对象实例,并通过调用对象的成员函数来操作和处理数据。

二、代码示例

#include <iostream>
// 定义一个名为Person的类
class Person {
private:
    std::string name;
    int age;
public:
    // 构造函数,用于创建Person对象时初始化成员变量
    Person(std::string n, int a) {
        name = n;
        age = a;
    }
    // 成员函数,用于获取和设置name成员变量
    std::string getName() {
        return name;
    }
    void setName(std::string n) {
        name = n;
    }
    // 成员函数,用于获取和设置age成员变量
    int getAge() {
        return age;
    }
    void setAge(int a) {
        age = a;
    }
    // 成员函数,用于打印Person对象的信息
    void printInfo() {
        std::cout << "Name: " << name << std::endl;
        std::cout << "Age: " << age << std::endl;
    }
};
int main() {
    // 创建一个Person对象
    Person person("John", 25);
    // 调用成员函数获取和设置成员变量
    std::cout << "Name: " << person.getName() << std::endl;
    std::cout << "Age: " << person.getAge() << std::endl;
    person.setName("Alice");
    person.setAge(30);
    // 调用成员函数打印对象信息
    person.printInfo();
    return 0;
}

上述代码创建了一个名为Person的类,它具有name和age两个私有成员变量,以及构造函数、成员函数和一个简单的main函数。

在main函数中,我们首先创建一个Person对象person,并通过调用成员函数获取和设置成员变量的值。然后我们修改person对象的name和age,并最后调用printInfo函数以打印对象的信息。

三、构造函数

构造函数是一种特殊的成员函数,用于在创建类对象时初始化对象的成员变量。构造函数具有与类相同的名称,并且没有返回类型,包括默认构造函数和参数化构造函数。

构造函数的特点如下:

1.与类同名:构造函数与类的名称相同,没有返回类型,包括默认构造函数和参数化构造函数。

2.在对象创建时自动调用:构造函数在创建对象时自动调用,用于初始化对象的成员变量。

3.可以有多个构造函数:一个类可以有多个构造函数,根据不同的参数列表进行重载,以允许不同的对象初始化方式。

4.可以被重载和继承:类的构造函数可以重载,即在同一个类中可以有多个构造函数。并且如果一个类继承自另一个类,它可以调用基类的构造函数来初始化基类的成员。

下面是一个包含默认构造函数和参数化构造函数的示例:

#include <iostream>
class Person {
private:
    std::string name;
    int age;
public:
    // 默认构造函数,初始化成员变量为默认值
    Person() {
        name = "Unknown";
        age = 0;
    }
    // 参数化构造函数,初始化成员变量为传入的值
    Person(std::string n, int a) {
        name = n;
        age = a;
    }
    // 成员函数,用于打印Person对象的信息
    void printInfo() {
        std::cout << "Name: " << name << std::endl;
        std::cout << "Age: " << age << std::endl;
    }
};
int main() {
    Person person1; // 调用默认构造函数
    person1.printInfo(); // 输出默认值
    Person person2("John", 25); // 调用参数化构造函数
    person2.printInfo(); // 输出传入的值
    return 0;
}

在上述示例中,我们定义了一个名为Person的类,包含默认构造函数和参数化构造函数。

默认构造函数没有参数,会在创建Person对象时自动调用,并初始化成员变量name和age为默认值。在main函数中,我们创建了person1对象,没有传入任何参数,因此会调用默认构造函数进行初始化。

参数化构造函数有两个参数,用于传入name和age的值,并将它们赋给成员变量。在main函数中,我们创建了person2对象,并传入了相应的参数,因此会调用参数化构造函数进行初始化。

通过构造函数,我们可以在对象创建时为成员变量提供初始值,确保对象被正确地初始化。构造函数提供了一种方便和可靠的方式来初始化对象。

总结

本篇文章就讲解到这里,下篇文章我们继续讲解类的使用。


相关文章
|
10天前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
37 4
|
11天前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
35 4
|
1月前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
27 4
|
1月前
|
编译器 C语言 C++
【C++打怪之路Lv4】-- 类和对象(中)
【C++打怪之路Lv4】-- 类和对象(中)
23 4
|
1月前
|
算法 数据挖掘 Shell
「毅硕|生信教程」 micromamba:mamba的C++实现,超越conda
还在为生信软件的安装配置而烦恼?micromamba(micromamba是mamba包管理器的小型版本,采用C++实现,具有mamba的核心功能,且体积更小,可以脱离conda独立运行,更易于部署)帮你解决!
60 1
|
1月前
|
存储 安全 C++
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
21 1
|
1月前
|
存储 编译器 C++
【C++类和对象(下)】——我与C++的不解之缘(五)
【C++类和对象(下)】——我与C++的不解之缘(五)
|
1月前
|
编译器 C++
【C++类和对象(中)】—— 我与C++的不解之缘(四)
【C++类和对象(中)】—— 我与C++的不解之缘(四)
|
1月前
|
存储 编译器 C语言
【C++打怪之路Lv3】-- 类和对象(上)
【C++打怪之路Lv3】-- 类和对象(上)
17 0
|
1月前
|
存储 编译器 C语言
深入计算机语言之C++:类与对象(上)
深入计算机语言之C++:类与对象(上)