C++链式编程

简介: 学习一下C++链式编程

[TOC]

一、什么是链式编程

链式编程在C++中使用的地方很多,比如说输出的时候可以使用很多的<<,这就使用了链式编程的思想。

本质上链式编程就是调用一个方法的时候,这个方法的返回值是这个类的指针,然后再对这个指针进行操作。

下面具体介绍一下怎么使用链式编程。

二、链式编程的实现(指针)

实现创建一个类

class Person{
   
    public:
        int a;
        void setA(int a){
   
            this->a = a;
        }
        int getA(){
   
            return this->a;
        }
        Person* testL(const Person* p){
   
            this->a += p->a;
            return this;
        }
};
AI 代码解读

在这个类中有一个公共属性a,然后有属于a的getset方法,还有一个返回值为Person*testL方法,这个方法中的形参是Person属性的指针,在里面做的一个操作就是让这个类本身的属性a和传入进来的Person属性的指针p中的属性a进行赋值加,然后返回这个实例化类本身的指针this

而调用的时候使用的方法如下:

int main(){
   
    Person p1;
    Person p2;
    p2.setA(20);
    p1.testL(&p2)->testL(&p2)->testL(&p2)p;
    cout << p1.getA();
    return 1;
}
AI 代码解读

上面调用testL方法的时候使用的就是链式编程,因为当我的实例化变量p1调用testL后,返回的内容是实例化变量本身的指针this,所以这里可以直接用调用方法的返回值继续调用testL方法,这个就是一个最基本的链式编程,让它看起来是一个链条。

当然也可以继续改进一下这个代码,因为这个代码中返回的是一个指针,而指针的调用需要使用->的办法。

三、链式编程(引用)

这里直接将返回的指针改变为引用,返回的this指针前加一个解引用即可。

class Person{
   
    public:
        int a;
        void setA(int a){
   
            this->a = a;
        }
        int getA(){
   
            return this->a;
        }
        Person& testL(const Person* p){
   
            this->a += p->a;
            return *this;
        }
};
AI 代码解读

这样调用的时候就必须要使用->的方法了,直接可以使用.

int main(){
   
    Person p1;
    Person p2;
    p2.setA(20);
    p1.testL(&p2).testL(&p2).testL(&p2);
    cout << p1.getA();
    return 1;
}
AI 代码解读

这样也可以做到链式编程。

三、使用链式编程的地方

比如说你需要让外部内容传入进属性中进行累加和时就可以使用:

class Person{
   
    public:
        int a;
        void setA(int a){
   
            this->a = a;
        }
        int getA(){
   
            return this->a;
        }
        Person& testL(int b){
   
            this->a += b;
            return *this;
        }
};
int main(){
   
    Person p1;
    Person p2;
    p2.setA(20);
    p1.testL(20).testL(30).testL(6);
    cout << p1.getA();
    return 1;
}
AI 代码解读

还有就是当你重载了运算符后也可以使用链式编程,在运算符中使用链式编程有很多。

恰柠
+关注
目录
打赏
0
0
0
0
17
分享
相关文章
|
7月前
|
【C语言】extern 关键字详解
`extern` 关键字在C语言中用于跨文件共享变量和函数的声明。它允许你在一个文件中声明变量或函数,而在其他文件中定义和使用它们。理解 `extern` 的使用可以帮助你组织和管理大型项目的代码。
698 3
数据传输中遇到问题要怎么解决
在数据传输中遇到问题时,可采取多种解决方案:使用可靠协议(如HTTPS、SFTP)、创建冗余备份、数据压缩与加密、错误检测与纠错、优化网络性能、解决数据丢失、降低延迟、提高安全性及解决带宽瓶颈。这些措施有助于确保数据传输的稳定、安全与高效。
《设计模式:可复用面向对象软件的基础(典藏版)》
本书是埃里克·伽玛著作,涵盖180个笔记,主要介绍面向对象设计模式,包括MVC、设计模式编目、组织编目、实现描述、复用机制、运行时与编译时结构关联、设计支持变化等方面。书中详细解释了23种设计模式,如Abstract Factory、Adapter、Bridge、Builder等,按创建型、结构型、行为型分类,旨在提高软件可复用性和灵活性。
670 0
《设计模式:可复用面向对象软件的基础(典藏版)》
中间件配置和管理问题
【7月更文挑战第14天】
147 1
MQTT协议问题之阿里云物联网服务器断开如何解决
MQTT协议是一个轻量级的消息传输协议,设计用于物联网(IoT)环境中设备间的通信;本合集将详细阐述MQTT协议的基本原理、特性以及各种实际应用场景,供用户学习和参考。
644 1
【C/C++ 逗号表达式】C/C++中的逗号运算符
【C/C++ 逗号表达式】C/C++中的逗号运算符
208 0
RT-Thread快速入门-中断管理
RT-Thread快速入门-中断管理
320 0
Docker与Kubernetes集成以实现云原生应用程序:云原生在线教育平台
当将Docker与Kubernetes集成以实现云原生应用程序时,可以采用以下项目案例来详细解释:
235 0
MySQL 8.0 新密码策略的细节补充
密码时间 控制策略生效,历史密码次数 控制策略不生效,mysql.password_history 将记录指定时间内的所有密码且均不能被重用。
485 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问