C++学习笔记之类与对象详解

C++学习笔记之类与对象详解

1. 类与对象

在C++语言中,类是一种用户自定义的数据类型,它允许将数据和行为封装成一个对象,从而实现了面向对象的编程思想。而对象,则是类的具体化实例化。

1.1 类的定义

类的定义包含两个部分:类声明和类实现。

1.1.1 类的声明

类的声明通常在头文件中完成,它包含了类名、数据成员和成员函数的声明。

// 声明一个名为Person的类
class Person {
public:
    // 声明构造函数和成员函数
    Person(string name, int age);
    void sayHi();

private:
    // 声明数据成员
    string m_name;
    int m_age;
};

其中,publicprivateprotected 是用来修饰数据成员及成员函数在外部的可见性和访问权限。

1.1.2 类的实现

类的实现包含类成员函数的实现部分。通常在 .cpp 文件中实现成员函数,并在每个函数前添加类名和作用域解析符::

// 在 .cpp 文件中实现类的成员函数
Person::Person(string name, int age) {
    m_name = name;
    m_age = age;
}

void Person::sayHi() {
    cout << "Hi, my name is " << m_name << ", I'm " << m_age << " years old." << endl;
}

1.2 对象的创建和使用

在类的定义完成后,我们可以通过创建对象的方式来使用类。在C++中,可以使用 new 关键字创建动态对象;或使用栈来创建一个局部变量的对象。

// 创建对象
Person person("Tom", 20);     // 在栈上创建对象
Person* pp = new Person("Bob", 25);  // 在堆上创建对象

// 使用对象调用成员函数
person.sayHi();
pp->sayHi();

// 释放动态创建的对象
delete pp;

2. 类的成员

类的成员包括数据成员和成员函数。

2.1 数据成员

数据成员是指在类中定义的变量。它们通常被私有化,在类的内部使用,并通过类的公有成员函数来访问。

class Person {
public:
    // 声明构造函数和成员函数
    Person(string name, int age);
    void sayHi() const; // 使用const关键字确保函数不会修改类的数据成员
    void setName(string name);
    void setAge(int age);

private:
    // 声明数据成员
    string m_name;
    int m_age;
};

// 在 .cpp 文件实现成员函数
void Person::setName(string name) {
    m_name = name;
}

void Person::setAge(int age) {
    m_age = age;
}

void Person::sayHi() const {
    cout << "Hi, my name is " << m_name << ", I'm " << m_age << " years old." << endl;
}

2.2 成员函数

成员函数是指在类中定义的函数,它们可以访问类中的数据成员,以及其它成员函数。

class Person {
public:
    // 声明构造函数和成员函数
    Person(string name, int age);
    void sayHi() const; // 使用const关键字确保函数不会修改类的数据成员
    void setName(string name);
    void setAge(int age);

private:
    // 声明数据成员
    string m_name;
    int m_age;
};

// 在 .cpp 文件实现成员函数
void Person::setName(string name) {
    m_name = name;
}

void Person::setAge(int age) {
    m_age = age;
}

void Person::sayHi() const {
    cout << "Hi, my name is " << m_name << ", I'm " << m_age << " years old." << endl;
}

示例说明

示例1:创建对象并调用成员函数

#include <iostream>
using namespace std;

class Person {
public:
    // 声明构造函数和成员函数
    Person(string name, int age);
    void sayHi() const; // 使用const关键字确保函数不会修改类的数据成员
    void setName(string name);
    void setAge(int age);

private:
    // 声明数据成员
    string m_name;
    int m_age;
};

// 实现构造函数
Person::Person(string name, int age) {
    m_name = name;
    m_age = age;
}

// 实现成员函数
void Person::setName(string name) {
    m_name = name;
}

void Person::setAge(int age) {
    m_age = age;
}

void Person::sayHi() const {
    cout << "Hi, my name is " << m_name << ", I'm " << m_age << " years old." << endl;
}

int main() {
    // 创建对象并调用成员函数
    Person person("Tom", 20);
    person.sayHi();
    person.setName("Jack");
    person.setAge(25);
    person.sayHi();

    return 0;
}

输出结果:

Hi, my name is Tom, I'm 20 years old.
Hi, my name is Jack, I'm 25 years old.

示例2:动态创建对象并调用成员函数

#include <iostream>
using namespace std;

class Person {
public:
    // 声明构造函数和成员函数
    Person(string name, int age);
    void sayHi() const; // 使用const关键字确保函数不会修改类的数据成员
    void setName(string name);
    void setAge(int age);

private:
    // 声明数据成员
    string m_name;
    int m_age;
};

// 实现构造函数
Person::Person(string name, int age) {
    m_name = name;
    m_age = age;
}

// 实现成员函数
void Person::setName(string name) {
    m_name = name;
}

void Person::setAge(int age) {
    m_age = age;
}

void Person::sayHi() const {
    cout << "Hi, my name is " << m_name << ", I'm " << m_age << " years old." << endl;
}

int main() {
    // 创建动态对象并调用成员函数
    Person* pp = new Person("Bob", 25);
    pp->sayHi();
    pp->setName("Alice");
    pp->setAge(30);
    pp->sayHi();

    // 释放动态对象
    delete pp;

    return 0;
}

输出结果:

Hi, my name is Bob, I'm 25 years old.
Hi, my name is Alice, I'm 30 years old.

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++学习笔记之类与对象详解 - Python技术站

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

相关文章

  • 支付宝、微信、qq收款二维码三合一

    以下是关于“支付宝、微信、qq收款二维码三合一”的详细攻略,包括基本概念、使用方法和两个示例。 基本概念 支付宝、微信、qq款二码三一是指将支付宝、微信、qq三个平台的收款二维码合并成一个二维码,方便进行收款。这种方式可以减少用户的操作步骤,提高用户的使用体验。 使用方法 以下是使用支付宝、微信、收二维码三合一的方法: 打开支付宝、微信、qq款页面,分别获取…

    other 2023年5月7日
    00
  • freemarker常用语法

    Freemarker常用语法攻略 FreeMarker是一种模板引擎,它允许我们使用模板来生成文本输出。在本攻略中,我们将介绍FreeMarker的常用语法,包括变量、指令、条件语句、循环语句等。 变量 在FreeMarker中,我们可以使用变量来表示数据。以下是一个示例: <#assign name = "John Doe"&gt…

    other 2023年5月9日
    00
  • Linux下查看CPU型号,内存大小,硬盘空间的命令(详解)

    在Linux下,可以使用一些命令来查看CPU型号、内存大小和硬盘空间。下面是详细的攻略: 查看CPU型号 要查看CPU型号,可以使用lscpu命令。该命令会显示有关CPU的详细信息,包括型号、架构和核心数等。 示例1:运行lscpu命令 $ lscpu 输出示例: Architecture: x86_64 CPU op-mode(s): 32-bit, 64…

    other 2023年8月1日
    00
  • CentOS7上如何借助系统存储管理器管理LVM卷?

    在CentOS7上,LVM卷管理是非常重要的,而系统存储管理器可以帮助我们管理LVM卷。下面是CentOS7上如何借助系统存储管理器管理LVM卷的完整攻略: 1. 安装system-storage-manager 如果您的系统上尚未安装system-storage-manager,则需先通过以下命令进行安装: sudo yum install system-…

    other 2023年6月27日
    00
  • vue如何自定义封装API组件

    Vue是一套用于构建用户界面的渐进式框架,可以轻松地封装API组件来复用代码和简化项目架构。下面是Vue自定义封装API组件的完整攻略: 步骤 创建一个Vue组件 <template> <button @click="login">{{ label }}</button> </template&g…

    other 2023年6月25日
    00
  • WordPress中编写自定义存储字段的相关PHP函数解析

    在WordPress开发中,有时我们需要在文章,页面或自定义内容类型中添加自定义字段存储特定的数据。这些自定义字段也可以称为元数据。本文将详细讲解在WordPress中编写自定义存储字段的相关PHP函数解析。 1. add_post_meta()函数 add_post_meta()函数用于向文章,页面或自定义内容类型添加一个自定义字段。它有三个参数:$pos…

    other 2023年6月25日
    00
  • IOC 容器启动和Bean实例化两个阶段详解

    当我们启动一个Spring应用程序时,Spring容器将会进行两个主要的阶段:IOC容器启动和Bean实例化。下面将对这两个阶段进行详细解析。 IOC容器启动 IOC容器启动是指在应用程序启动时Spring容器进行的第一个阶段。在此阶段,Spring 容器会执行以下操作: 加载Spring的配置文件。 读取配置文件中的Bean定义。 通过反射机制实例化Bea…

    other 2023年6月27日
    00
  • Win10预览版14328自制中文ISO镜像下载 32位/64位

    Win10预览版14328自制中文ISO镜像下载攻略 本攻略将详细介绍如何下载Win10预览版14328的自制中文ISO镜像,包括32位和64位版本。请按照以下步骤进行操作: 步骤一:准备工作 在开始之前,请确保您已经满足以下条件: 一台可靠的互联网连接的计算机。 足够的存储空间来保存ISO镜像文件。 了解如何使用虚拟机或者刻录工具来安装操作系统。 步骤二:…

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