C++类与对象的详细说明2

C++类与对象的详细说明2

1. 构造函数和析构函数

1.1 构造函数

构造函数是一种特殊的成员函数,它会在对象被创建时自动调用。构造函数可以用来初始化类的成员变量,或进行一些必要的初始化操作。在C++中,类可以拥有多个构造函数,这些构造函数的名称与类名相同,但可以拥有不同的参数列表。

下面是一个简单的示例代码,展示了如何声明和定义一个构造函数:

class Person {
  public:
    Person(string name, int age);  // 声明构造函数
  private:
    string name;
    int age;
};

Person::Person(string n, int a) {  // 定义构造函数
    name = n;
    age = a;
}

1.2 析构函数

与构造函数相反,析构函数会在对象被销毁时自动调用,用于释放对象占用的资源(比如动态分配的内存等)。析构函数的名称与类名相同,但前面要加上一个波浪号“~”。

下面是一个简单的示例代码,展示了如何声明和定义一个析构函数:

class Person {
  public:
    Person(string name, int age);
    ~Person();  // 声明析构函数
  private:
    string name;
    int age;
};

Person::~Person() {  // 定义析构函数
    // 对象被销毁时执行的代码
}

2. 访问控制

C++类中有三个访问控制关键字:publicprivateprotected。它们控制类的成员变量和成员函数对于外部的可见性和可访问性。

2.1 public

public成员可以被类的外部和内部代码访问,包括成员函数和非成员函数。这意味着它们可以从任何地方访问,不论是类的内部还是外部。通常,public成员用于类的接口,可以被其他代码使用。

下面是一个简单的示例代码,展示了如何使用public成员:

class Person {
  public:
    string name;  // 声明public成员
    int age;

    void display() {  // 声明public成员函数
        cout << "Name: " << name << endl;
        cout << "Age: " << age << endl;
    }
};

int main() {
    Person person;
    person.name = "Alice";  // 可以直接访问public成员
    person.age = 20;
    person.display();  // 可以调用public成员函数
    return 0;
}

2.2 private

private成员只能够被类的内部代码所访问,包括成员函数。这意味着它们不能被类的外部代码使用。通常,private成员用于类的实现,可以隐藏代码的细节。

下面是一个简单的示例代码,展示了如何使用private成员:

class Person {
  public:
    void setName(string n) {  // 声明public成员函数
        name = n;  // 可以访问private成员
    }
    void display() {  // 声明public成员函数
        cout << "Name: " << name << endl;  // 可以访问private成员
        cout << "Age: " << age << endl;  // 可以访问private成员
    }
  private:
    string name;  // 声明private成员
    int age;
};

int main() {
    Person person;
    person.setName("Alice");  // 可以调用public成员函数来访问private成员
    person.display();
    return 0;
}

2.3 protected

protected成员可以被类的内部代码和派生类的成员函数访问,但不能被类的外部代码使用。派生类是指由这个类派生出来的子类。通常,protected成员用于实现继承。

下面是一个简单的示例代码,展示了如何使用protected成员:

class Person {
  protected:
    string name;  // 声明protected成员
    int age;
};

class Student : public Person {  // 通过public继承Person类
  public:
    void setName(string n) {  // 声明public成员函数
        name = n;  // 可以访问protected成员
    }
    void display() {  // 声明public成员函数
        cout << "Name: " << name << endl;  // 可以访问protected成员
        cout << "Age: " << age << endl;  // 可以访问protected成员
    }
};

int main() {
    Student student;
    student.setName("Alice");  // 可以访问protected成员
    student.display();
    return 0;
}

3. 继承

继承是C++面向对象编程的重要特性之一,它允许子类(派生类)获取父类(基类)的成员变量和成员函数。派生类可以直接使用父类的成员,也可以重写或添加自己的成员。在C++中,继承有三种类型:公有继承、私有继承和保护继承。

3.1 公有继承

公有继承允许派生类的成员函数和外部函数访问父类的公有成员。当派生类继承父类时,需要在类名后面加上一个冒号“:”,然后跟上继承类型和父类的名称。公有继承的继承类型是public

下面是一个简单的示例代码,展示了如何使用公有继承:

class Animal {  // 定义Animal类
  public:
    void eat() {  // 声明public成员函数
        cout << "Animal is eating\n";
    }
};

class Dog : public Animal {  // 定义Dog类并公有继承Animal类
  public:
    void bark() {  // 声明public成员函数
        cout << "Dog is barking\n";
    }
};

int main() {
    Dog dog;
    dog.eat();  // 可以访问Animal类的公有成员函数
    dog.bark();
    return 0;
}

3.2 私有继承

私有继承允许派生类的成员函数访问父类的私有成员,但外部函数不能访问。当派生类继承父类时,需要在类名后面加上一个冒号“:”,然后跟上继承类型和父类的名称。私有继承的继承类型是private

下面是一个简单的示例代码,展示了如何使用私有继承:

class Animal {  // 定义Animal类
  private:
    int age;  // 声明私有成员
  public:
    Animal(int a) {  // 声明构造函数
        age = a;
    }
};

class Dog : private Animal {  // 定义Dog类并私有继承Animal类
  public:
    Dog(int a) : Animal(a) {  // 构造函数的代码中需要调用父类的构造函数
    }
    void bark() {  // 声明public成员函数
        cout << "Dog is barking\n";
    }
};

int main() {
    Dog dog(2);
    dog.bark();
    return 0;
}

3.3 保护继承

保护继承允许派生类和父类的成员函数访问父类的保护成员,但外部函数不能访问。当派生类继承父类时,需要在类名后面加上一个冒号“:”,然后跟上继承类型和父类的名称。保护继承的继承类型是protected

下面是一个简单的示例代码,展示了如何使用保护继承:

class Animal {
  protected:
    string name;  // 声明保护成员
    void setName(string n) {  // 声明保护成员函数
        name = n;
    }
};

class Dog : protected Animal {  // 定义Dog类并保护继承Animal类
  public:
    void setName(string n) {  // 声明public成员函数来调用保护成员函数
        Animal::setName(n);
    }
    void bark() {  // 声明public成员函数
        cout << name << " is barking\n";  // 可以访问保护成员
    }
};

int main() {
    Dog dog;
    dog.setName("Tom");  // 可以调用public成员函数来访问保护成员
    dog.bark();
    return 0;
}

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

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • C#设置右键菜单的方法

    C#设置右键菜单的方法 在 C# 编程中,我们可以使用 ContextMenuStrip 控件来设置右键菜单。下面是 C# 设置右键菜单的详细攻略。 准备工作 在开始设置右键菜单之前,我们需要先创建一个 Windows 窗体应用程序,并添加一个控件作为右键菜单的触发对象。这里以一个简单的 Windows 窗体应用程序为例,代码如下: namespace Ri…

    other 2023年6月27日
    00
  • apacheftpserver的简单入门(java应用内嵌ftpserver)

    当然,我很乐意为您提供有关“Apache FtpServer的简单入门(Java应用内嵌FtpServer)”的完整攻略。以下是详细的步骤和两个示例: 1 Apache FtpServer的简单入门 Apache FtpServer是一个基于Java的FTP服务器,可以轻松地将FTP功能集成到Java应用程序中。以下是使用Apache FtpServer的简…

    other 2023年5月6日
    00
  • vagrant安装

    Vagrant安装 Vagrant是一款用于构建和管理虚拟开发环境的工具。它可以自动化虚拟机的创建、配置和销毁,得开发者可以快速地搭建开发环境。本文将详细讲解Vagrant的安装过程,并提供两个示例说明。 1. 安装VirtualBox Vagrant需要依赖于虚拟化软件,常用的虚拟化件是VirtualBox。因此,在安装Vagrant之前,需要先安装Vir…

    other 2023年5月8日
    00
  • 在vscode成功配置python环境

    在VSCode成功配置Python环境 如果你是一名Python开发者,并且使用VSCode作为你的代码编辑器,那么你一定需要正确地配置Python环境。本文将指导你如何在VSCode中成功配置Python环境。 Step 1:安装Python 在成功配置Python环境之前,你需要先在你的计算机上安装Python。你可以在Python官网https://w…

    其他 2023年3月28日
    00
  • 安装sklearn失败

    安装sklearn失败 机器学习是当前最热门的领域之一,而Scikit-learn(sklearn)则是最受欢迎的Python机器学习库之一。然而,在安装sklearn时可能会遇到各种问题,包括无法安装、无法使用或出现其他错误。本文将介绍如何识别和解决安装sklearn时可能遇到的一些常见问题。 安装sklearn时报错 如果在安装sklearn时出现错误消…

    其他 2023年3月28日
    00
  • JavaScript数组特性与实践应用深入详解

    接下来我会详细讲解“JavaScript数组特性与实践应用深入详解”的完整攻略,主要分为三个部分:介绍JavaScript数组的特性,探讨数组的实践应用以及通过两个示例说明如何实现高效的数组操作。 一、JavaScript数组特性 JavaScript数组是一种数据结构,用于存储一组数据,并且可以通过数组下标访问每个元素。以下是JavaScript数组的一些…

    other 2023年6月25日
    00
  • “服务器推”技术【转载+整理】

    服务器推技术【转载+整理】 服务器推技术是指通过服务器主动向客户端推送数据的技术,也被称为“服务器推送”或“推送服务”。这一技术在现代web应用开发中被广泛使用,特别适用于需要实时更新数据的场景,比如社交网络、股票市场等。 前置知识 在学习服务器推技术之前,你需要掌握以下技术: HTTP 协议:服务器推技术的核心是“长连接”,需要使用 HTTP 协议的“ke…

    其他 2023年3月29日
    00
  • VB6.0怎么使用文件对话框控件?

    当你需要让用户选择文件(如打开或保存文件),文件对话框控件是一个非常有用的工具。在VB6.0中,你可以通过以下步骤使用文件对话框控件: 步骤1:添加文件对话框控件 将文件对话框控件添加到你的窗体控件中。这可以通过在窗体设计器中拖动和放置文件对话框控件或直接编写代码实现。以下是一个在窗体1中添加文件对话框控件的示例代码: Private OpenFileDia…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部