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

yizhihongxing

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日

相关文章

  • 为什么鼠标被禁用了?网页鼠标右键被禁用解决方法

    为什么鼠标被禁用了?网页鼠标右键被禁用解决方法 问题描述 在一些网页上,我们可能会发现鼠标右键被禁用了。这一般是由网页开发者通过JavaScript代码实现的。但是,有时候我们确实需要使用鼠标右键进行一些操作,这时候该怎么办呢? 解决方法 我们可以通过以下几种方法来解决鼠标右键被禁用的问题: 方法一:使用快捷键 如果你需要复制或粘贴文本,可以使用快捷键来实现…

    other 2023年6月27日
    00
  • 数据降维-lda线性降维

    数据降维-lda线性降维 数据降维是机器学习中非常重要的一个主题,主要是为了通过减少特征属性数量来降低复杂性和提高性能。常常使用的降维方法有主成分分析(PCA)和线性判别分析(LDA)。本文主要介绍LDA线性降维方法。 背景知识 在进行机器学习任务时,我们往往需要面对高维数据的挑战。比如说,在一个图像分类任务中,每一张图像可能有数千个像素点,每个像素点又有三…

    其他 2023年3月28日
    00
  • opencv实现人脸检测

    OpenCV是一个开源的计算机视觉库,可以用于图像处理、计算机视觉和机器学习等领域。本文将提供一个完整的攻略,包括在OpenCV中实现人脸检测的步骤,以及两个示例说明。 安装OpenCV 在Linux系统中安装OpenCV可以使用以下步骤: 安装OpenCV依赖库,例如使用apt-get命令安装。 下载OpenCV源代码,可以从OpenCV官网下载。 编译和…

    other 2023年5月5日
    00
  • 浅谈头文件algorithm中的常用函数

    下面是针对“浅谈头文件algorithm中的常用函数”的完整攻略。 1. algorithm头文件简介 algorithm头文件是C++标准库中提供的一个常用头文件,其包含了许多有用的函数,这些函数主要用于对数组、容器和迭代器等进行排序、查找、合并等操作。 2. 常用函数介绍 接下来,我们来简单介绍一下algorithm头文件中常用的几个函数。 2.1 排序…

    other 2023年6月27日
    00
  • sqlserver计算时间差datediff函数

    简介 在SQL Server中,我们可以使用DATEDIFF函数来计算两个日期之间的时间差。该函数返回两个日期之间的时间差,以指定的时间单位表示。在本攻略中,我们将介绍如何使用DATEDIFF函数计算时间差。 语法 以下是DATEDIFF函数的语法: DATEDIFF ( datepart , startdate , enddate ) 其中,datepar…

    other 2023年5月6日
    00
  • 用局域网共享管理软件实现局域网文件共享设置、局域网共享文件夹设置

    使用局域网共享管理软件实现局域网文件共享设置和局域网共享文件夹设置,需要按照以下步骤操作: 步骤一:安装局域网共享管理软件 在开始操作前,首先需要下载一个局域网共享管理软件,如“局域网共享大师”、“远程共享助手”等。这里以“局域网共享大师”为例进行讲解。下载好软件后,进行安装和打开。 步骤二:设置共享文件夹 在“局域网共享大师”软件中,点击菜单栏中的“共享设…

    other 2023年6月27日
    00
  • python多继承(钻石继承)问题和解决方法简单示例

    Python多继承问题和解决方法简单示例 什么是多继承 在面向对象编程中,多继承是指一个类可以从多个父类继承属性和方法的过程。Python是一门支持多继承的语言。 什么是钻石继承 钻石继承是多继承中的一种经典问题,也称为菱形继承。这种继承关系如同一个钻石,有一个父类,两个子类,但父类在两个子类中又被重复继承,呈现出了钻石的形状。 以以下代码为例: class…

    other 2023年6月27日
    00
  • iso七层模型详解

    以下是“ISO七层模型详解的完整攻略”的详细讲解,过程中包含两个示例说明的标准Markdown格式文本: ISO七层模型详解的完整攻略 ISO七层模型是计算机网络通信协议的标准化模型,它将网络通信分为七个层次,每个层次都有特定的和协议。以下是ISO七层模型的详细介绍: 1. 物理层 物理层是ISO七层模型的最底层,它负责将数字信号转换为物理信号,并在物理媒介…

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