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日

相关文章

  • 使用elasticsearch定时删除索引数据

    使用Elasticsearch定时删除索引数据的完整攻略 以下是一个详细的攻略来使用Elasticsearch定时删除索引数据: 创建索引模板:首先,创建一个索引模板,用于定义要删除的索引的匹配规则。可以使用以下命令创建一个索引模板: json PUT _index_template/delete-index-template { \”index_patte…

    other 2023年10月18日
    00
  • php中static 静态变量和普通变量的区别

    PHP中static静态变量和普通变量的区别 在PHP中,静态变量和普通变量是两种不同类型的变量。它们在作用域、生命周期和访问方式上有所不同。 作用域 普通变量:普通变量的作用域限定在其所在的函数或方法内部。它们只能在声明它们的函数或方法中访问。 静态变量:静态变量的作用域限定在声明它们的类或函数内部。它们可以在声明它们的类或函数内部以及类的所有实例中访问。…

    other 2023年7月29日
    00
  • javascript图片延迟加载实现方法及思路

    下面我来详细讲解一下“javascript图片延迟加载实现方法及思路”的完整攻略。 什么是图片延迟加载 图片延迟加载(Lazy Load)是一种优化网页性能的技术,它可以延迟加载页面中的图片,使网页的加载速度更快,提升用户的体验。具体实现就是在网页中,把页面中的图片的真实地址存储在其他属性里,待页面加载完毕后,再通过 JavaScript 代码来获取并替换图…

    other 2023年6月25日
    00
  • 协方差自适应调整的进化策略(cma-es)转载自知乎

    协方差自适应调整的进化策略(CMA-ES) 协方差自适应调整的进化策略(CMA-ES)是一种优化算法,用于解决连续优化问题。它是种基自然进化的算法,通过模拟生物进化的过程来寻找最优解。本文将转载自知乎,详细讲CMA-ES算法的原理、实现和应用。 原理 CMA-ES算法核心思想是通过不断地调整空间的协方差矩阵来适应问题特征,从而实现更加高效的搜索。具体来说,C…

    other 2023年5月8日
    00
  • Docker Compose引用环境变量的方法示例

    Docker Compose 是一个使用 YAML 文件来定义和运行多个容器的工具。其中,Docker Compose 也支持使用环境变量进行配置,方便不同部署环境下的配置调整。以下是 Docker Compose 引用环境变量的方法示例攻略。 步骤1:创建 docker-compose.yaml 文件 首先,在你的项目根目录下创建一个名为 docker-c…

    other 2023年6月27日
    00
  • httpHandler实现.Net无后缀名Web访问的实现解析

    httpHandler实现.Net无后缀名Web访问的实现解析 简介 在传统的ASP.NET Web应用程序中,URL通常包含文件扩展名,例如.aspx或.html。然而,有时候我们希望在URL中省略文件扩展名,以提供更友好的URL结构。为了实现这一目标,我们可以使用httpHandler来处理无后缀名的Web访问。 实现步骤 步骤 1: 创建HttpHan…

    other 2023年8月6日
    00
  • 无线键盘大小写指示灯安装图文方法讲解

    无线键盘大小写指示灯安装图文方法讲解 步骤一:准备工作 在开始安装之前,确保你已经准备好以下材料: 无线键盘 大小写指示灯套件(包括指示灯和连接线) 螺丝刀 可能需要的其他工具(根据键盘型号而定) 步骤二:确定安装位置 首先,确定你想要安装大小写指示灯的位置。通常,这个位置是在键盘的顶部中央,靠近功能键或者屏幕上方。 步骤三:打开键盘 使用螺丝刀或其他适当的…

    other 2023年8月16日
    00
  • Ghost8.0详细使用方法与命令行参数

    Ghost 8.0 详细使用方法与命令行参数攻略 Ghost 8.0 是一款流行的博客平台,使用命令行来控制和管理博客。在本攻略中,我们将介绍 Ghost 8.0 的详细使用方法和常用的命令行参数。 安装 Ghost 8.0 首先,需要在系统上安装 Node.js 和 npm。接着,在命令行工具中运行以下命令来安装 Ghost-CLI: npm instal…

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