当前位置: 首页 > news >正文

c++类和对象——this指针

在C++中,类和对象以及 this 指针是非常重要的概念,下面为你详细介绍:
 
1.类
 
类是一种用户自定义的数据类型,它是对具有相同属性和行为的对象的抽象描述。类中可以包含数据成员(变量)和成员函数(函数)。例如:
 
class Person

{
public:
    // 数据成员
    std::string name;
    int age;

    // 成员函数
    void introduce()

   {
        std::cout << "My name is " << name <<           ", and I'm " << age << " years old."               << std::endl;
    }
};
 
 
在这个例子中, Person 类定义了两个数据成员 name 和 age ,以及一个成员函数 introduce 。
 
2.对象
 
对象是类的一个实例,是类的具体表现。可以通过类来创建多个对象,每个对象都有自己独立的存储空间来存储数据成员的值。例如:
 
int main()

{
    Person person1;
    person1.name = "Alice";
    person1.age = 25;
    person1.introduce();

    Person person2;
    person2.name = "Bob";
    person2.age = 30;
    person2.introduce();

    return 0;
}
 
 
这里创建了两个 Person 类的对象 person1 和 person2 ,它们各自有自己的 name 和 age 值。
 
3.this指针
 
 this 指针是一个隐含在类的成员函数中的指针,它指向调用该成员函数的对象。在成员函数内部,可以使用 this 指针来访问对象的成员变量和其他成员函数。例如:
 
class Person

{
public:
    std::string name;
    int age;

    void setName(const std::string& newName)

   {
        this->name = newName; // 使用this指针访问成员变量
    }

    void introduce()

   {
        std::cout << "My name is " << name <<          ", and I'm " << age << " years old." <<          std::endl;
    }
};
 
 
当调用 person1.setName("Charlie"); 时, this 指针指向 person1 ,这样 this->name 就表示 person1 的 name 成员变量。
 
 this 指针对于区分成员变量和函数参数(如果参数名与成员变量名相同)以及在成员函数中引用当前对象非常有用。

4.this使用

在C++中,不仅可以对基本数据类型的函数进行重载,也可以对自定义类型(比如类)进行函数重载。常见的有对成员函数重载,以及对一些操作符重载(这也属于函数重载的一种特殊形式)。下面通过一个示例代码来展示对自定义类型的函数重载,这里以一个简单的 Fraction (分数)类为例,重载其成员函数和 + 操作符:
 
#include <iostream>

class Fraction

{
private:
    int numerator;  // 分子
    int denominator; // 分母

public:
    // 构造函数
    Fraction(int num = 0, int den = 1) : numerator(num), denominator(den) {}

    // 重载成员函数,输出分数
    void print() const

    {
        std::cout << numerator << "/" << denominator << std::endl;
    }
    // 重载成员函数,根据传入的参数改变分子分母
    void print(int newNum, int newDen) const

    {
        std::cout << newNum << "/" << newDen            << std::endl;
    }

    // 重载 + 操作符,实现分数相加
    Fraction operator+(const Fraction& other) const

  {
        int newNum = numerator * other.denominator + other.numerator * denominator;
        int newDen = denominator * other.denominator;
        return Fraction(newNum, newDen);
    }
};

int main()

{
    Fraction f1(1, 2);
    Fraction f2(1, 3);

    f1.print();  // 调用第一个print函数
    f1.print(3, 4); // 调用第二个print函数

    Fraction sum = f1 + f2;  // 调用重载的+操作符函数
    sum.print();

    return 0;
}
 
 
在上述代码中:
 
1. 定义了 Fraction 类,包含分子和分母两个私有成员变量。
2. 重载了 print 成员函数,一个无参的用于输出当前分数对象的分子分母,另一个带参数的可以输出指定的分子分母。
3. 重载了 + 操作符,使得两个 Fraction 对象可以直接使用 + 进行相加操作,返回一个新的 Fraction 对象表示相加的结果。
 
这样就展示了自定义类型函数重载的基本使用方法,让自定义类型也能像基本数据类型一样方便地进行各种操作。

相关文章:

  • 一个网站如何做盈利网站推广费用一般多少钱
  • 最大的房产网站域名注册新网
  • 衡水有做网站的吗临沂网站建设优化
  • 代还app开发公司seo排名工具外包
  • 校园微网站建设方案精准网站seo诊断报告
  • 怎么查看一个网站有没有做推广最好的优化公司
  • Vue Router(2)
  • Spring AI开发MCP Server和MCP Client
  • 从一批视频里面抽取固定的第n帧图片(包含并行实现)
  • lanqiaoOJ 551 灌溉
  • 回溯算法+对称剪枝——从八皇后问题到数独问题(二)
  • 基于autokeras的简单天气预报例子和运行输出
  • Maven 基础知识
  • HarmonyOS-ArkUI 装饰器V2 @ObservedV2与@Trace装饰器
  • 3ds Max 2016的版本怎么处理 按键输入被主程序截断 C#winform窗体接受不到英文输入
  • linux入门六:Linux Shell 编程
  • c++的函数重载
  • 机器学习 | 强化学习方法分类汇总 | 概念向
  • 国产信创数据库:PolarDB 分布式版 V2.0,支持集中分布式一体化
  • Vanna + qwq32b 实现 text2SQL
  • springboot集成springcloud vault读值示例
  • C++ - 数据容器之 unordered_map(声明与初始化、插入元素、访问元素、遍历元素、删除元素、查找元素)
  • 三相电为什么没零线也能通电
  • kali linux vmware 光标无法移出vmware,需要按ctrl + alt 才能移出光标
  • 【DB2】事务日志满/归档占用较大问题处理记录
  • 深入解析栈式虚拟机与反向波兰表示法