【C++面向对象】9. 重载

news2024/11/24 3:34:55

文章目录

  • 【 1. 函数重载 】
  • 【 2. 运算符重载 】
    • 2.1 可重载运算符 / 不可重载运算符
    • 2.2 一元 运算符重载
    • 2.3 二元 运算符重载
    • 2.4 关系 运算符重载
    • 2.5 输入/输出 运算符重载
    • 2.6 ++和-- 运算符重载
    • 2.7 赋值 运算符重载
    • 2.8 函数调用() 运算符重载
    • 2.9 下标[ ] 运算符重载
    • 2.10 类成员访问-> 运算符重载

  • C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为 函数重载运算符重载
  • 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有 相同名称的声明,但是它们的 参数列表和定义(实现)不相同
  • 当我们调用一个重载函数或重载运算符时,编译器通过把使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。这个选择最合适的重载函数或重载运算符的过程,称为 重载决策

【 1. 函数重载 】

  • 在同一个作用域内,可以声明几个功能类似的同名函数,但是这些 同名函数的形式参数(指参数的个数、类型或者顺序)至少有1个必须不同。我们不能仅通过返回类型的不同来重载函数。
  • 实例
// 调用相同函数名但形参不同的类的成员函数,实现不同的输出功能。
#include <iostream>
using namespace std;

class printData
{
   public:
      void print(int i)
	  {
        cout << "整数为: " << i << endl;
      }

      void print(double  f)
	  {
        cout << "浮点数为: " << f << endl;
      }

      void print(char c[])
	  {
        cout << "字符串为: " << c << endl;
      }
};

int main(void)
{
   printData pd;

   pd.print(5); // 输出整数
   
   pd.print(500.263);// 输出浮点数
   
   char c[] = "Hello C++";
   pd.print(c);// 输出字符串

   return 0;
}

在这里插入图片描述

【 2. 运算符重载 】

  • 通过重定义或重载大部分 C++ 内置的运算符。我们就能使用 自定义类型的运算符
  • 重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。如下所示:
Box operator+(const Box&);
  • 声明加法运算符用于把两个 Box 对象相加,返回最终的 Box 对象。大多数的重载运算符可被定义为普通的非成员函数或者被定义为类的成员函数。如果我们定义上面的函数为类的非成员函数,那么我们需要为每次操作传递两个参数,如下所示:
Box operator+(const Box&, const Box&);
  • 实例
//下面的实例使用成员函数演示了运算符重载的概念。在这里,对象作为参数进行传递,对象的属性使用 this 运算符进行访问,如下所示:
#include <iostream>
using namespace std;

class Box
{
   public:

      double getVolume(void)
      {
         return length * breadth * height;
      }
      void setLength( double len )
      {
          length = len;
      }

      void setBreadth( double bre )
      {
          breadth = bre;
      }

      void setHeight( double hei )
      {
          height = hei;
      }
      // 重载 + 运算符,用于把两个 Box 对象相加
      Box operator+(const Box& b)
      {
         Box box;
         box.length = this->length + b.length;
         box.breadth = this->breadth + b.breadth;
         box.height = this->height + b.height;
         return box;
      }
   private:
      double length;      // 长度
      double breadth;     // 宽度
      double height;      // 高度
};
// 程序的主函数
int main( )
{
   Box Box1;                // 声明 Box1,类型为 Box
   Box Box2;                // 声明 Box2,类型为 Box
   Box Box3;                // 声明 Box3,类型为 Box
   double volume = 0.0;     // 把体积存储在该变量中

   // Box1 详述
   Box1.setLength(6.0); 
   Box1.setBreadth(7.0); 
   Box1.setHeight(5.0);

   // Box2 详述
   Box2.setLength(12.0); 
   Box2.setBreadth(13.0); 
   Box2.setHeight(10.0);

   // Box1 的体积
   volume = Box1.getVolume();
   cout << "Volume of Box1 : " << volume <<endl;

   // Box2 的体积
   volume = Box2.getVolume();
   cout << "Volume of Box2 : " << volume <<endl;

   // 把两个对象相加,得到 Box3
   Box3 = Box1 + Box2;

   // Box3 的体积
   volume = Box3.getVolume();
   cout << "Volume of Box3 : " << volume <<endl;

   return 0;
}

在这里插入图片描述

2.1 可重载运算符 / 不可重载运算符

  • 可重载的运算符列表
类型名称
双目算术运算符+ 加
- 减
* 乘
/ 除
% 取模
关系运算符== 等于
!= 不等于
< 小于
> 大于
<= 小于等于
>= 大于等于
逻辑运算符|| 逻辑或
&& 逻辑与
! 逻辑非
单目运算符+ 正
- 负
* 指针
& 取地址
自增自减运算符++ 自增
- - 自减
位运算符|| 按位或
& 按位与
~ 按位取反
^ 按位异或
<< 左移
>> 右移
赋值运算符=
+=
-=
*=
/=
% =
&=
|=
^=
<<=
>>=
空间申请与释放new
delete
new[ ]
delete[ ]
其他运算符() 函数调用
-> 成员访问
, 逗号
[ ] 下标
  • 不可重载的运算符列表
名称符号
成员访问运算符.
成员指针访问运算符.
->
域运算符::
长度运算符sizeof
条件运算符?:
预处理符号#

2.2 一元 运算符重载

#include <iostream>
using namespace std;

class Distance
{
   private:
      int feet;             // 0 到无穷
      int inches;           // 0 到 12
   public:
      // 构造函数
      Distance()
	  {
         feet = 0;
         inches = 0;
      }
      Distance(int f, int i)
	  {
         feet = f;
         inches = i;
      }
      // 显示距离的方法
      void displayDistance()
      {
         cout << "F: " << feet << " I:" << inches <<endl;
      }
      // 重载负运算符( - )
      Distance operator- ()  
      {
         feet = -feet;
         inches = -inches;
         return Distance(feet, inches);
      }
};
int main()
{
   Distance D1(11, 10), D2(-5, 11);

   -D1;                     // 取相反数
   D1.displayDistance();    // 距离 D1

   -D2;                     // 取相反数
   D2.displayDistance();    // 距离 D2

   return 0;
}

在这里插入图片描述

2.3 二元 运算符重载

#include <iostream>
using namespace std;

class Box
{
   double length;      // 长度
   double breadth;     // 宽度
   double height;      // 高度
public:

   double getVolume(void)
   {
      return length * breadth * height;
   }
   void setLength( double len )
   {
       length = len;
   }

   void setBreadth( double bre )
   {
       breadth = bre;
   }

   void setHeight( double hei )
   {
       height = hei;
   }
   // 重载 + 运算符,用于把两个 Box 对象相加
   Box operator+(const Box& b)
   {
      Box box;
      box.length = this->length + b.length;
      box.breadth = this->breadth + b.breadth;
      box.height = this->height + b.height;
      return box;
   }
};
// 程序的主函数
int main( )
{
   Box Box1;                // 声明 Box1,类型为 Box
   Box Box2;                // 声明 Box2,类型为 Box
   Box Box3;                // 声明 Box3,类型为 Box
   double volume = 0.0;     // 把体积存储在该变量中

   // Box1 详述
   Box1.setLength(6.0); 
   Box1.setBreadth(7.0); 
   Box1.setHeight(5.0);

   // Box2 详述
   Box2.setLength(12.0); 
   Box2.setBreadth(13.0); 
   Box2.setHeight(10.0);

   // Box1 的体积
   volume = Box1.getVolume();
   cout << "Volume of Box1 : " << volume <<endl;

   // Box2 的体积
   volume = Box2.getVolume();
   cout << "Volume of Box2 : " << volume <<endl;

   // 把两个对象相加,得到 Box3
   Box3 = Box1 + Box2;

   // Box3 的体积
   volume = Box3.getVolume();
   cout << "Volume of Box3 : " << volume <<endl;

   return 0;
}

在这里插入图片描述

2.4 关系 运算符重载

#include <iostream>
using namespace std;

class Distance
{
   private:
      int feet;             // 0 到无穷
      int inches;           // 0 到 12
   public:
      // 所需的构造函数
      Distance(){
         feet = 0;
         inches = 0;
      }
      Distance(int f, int i){
         feet = f;
         inches = i;
      }
      // 显示距离的方法
      void displayDistance()
      {
         cout << "F: " << feet << " I:" << inches <<endl;
      }
      // 重载负运算符( - )
      Distance operator- ()  
      {
         feet = -feet;
         inches = -inches;
         return Distance(feet, inches);
      }
      // 重载小于运算符( < )
      bool operator <(const Distance& d)
      {
         if(feet < d.feet)
         {
            return true;
         }
         if(feet == d.feet && inches < d.inches)
         {
            return true;
         }
         return false;
      }
};
int main()
{
   Distance D1(11, 10), D2(5, 11);

   if( D1 < D2 )
   {
      cout << "D1 is less than D2 " << endl;
   }
   else
   {
      cout << "D2 is less than D1 " << endl;
   }
   return 0;
}

在这里插入图片描述

2.5 输入/输出 运算符重载

#include <iostream>
using namespace std;

class Distance
{
   private:
      int feet;             // 0 到无穷
      int inches;           // 0 到 12
   public:
      // 所需的构造函数
      Distance(){
         feet = 0;
         inches = 0;
      }
      Distance(int f, int i){
         feet = f;
         inches = i;
      }
      friend ostream &operator<<( ostream &output, 
                                       const Distance &D )
      { 
         output << "F : " << D.feet << " I : " << D.inches;
         return output;            
      }

      friend istream &operator>>( istream  &input, Distance &D )
      { 
         input >> D.feet >> D.inches;
         return input;            
      }
};
int main()
{
   Distance D1(11, 10), D2(5, 11), D3;

   cout << "Enter the value of object : " << endl;
   cin >> D3;
   cout << "First Distance : " << D1 << endl;
   cout << "Second Distance :" << D2 << endl;
   cout << "Third Distance :" << D3 << endl;


   return 0;
}

在这里插入图片描述

2.6 ++和-- 运算符重载

#include <iostream>
using namespace std;

class Time
{
   private:
      int hours;             // 0 到 23
      int minutes;           // 0 到 59
   public:
      // 所需的构造函数
      Time(){
         hours = 0;
         minutes = 0;
      }
      Time(int h, int m){
         hours = h;
         minutes = m;
      }
      // 显示时间的方法
      void displayTime()
      {
         cout << "H: " << hours << " M:" << minutes <<endl;
      }
      // 重载前缀递增运算符( ++ )
      Time operator++ ()  
      {
         ++minutes;          // 对象加 1
         if(minutes >= 60)  
         {
            ++hours;
            minutes -= 60;
         }
         return Time(hours, minutes);
      }
      // 重载后缀递增运算符( ++ )
      Time operator++( int )         
      {
         // 保存原始值
         Time T(hours, minutes);
         // 对象加 1
         ++minutes;                    
         if(minutes >= 60)
         {
            ++hours;
            minutes -= 60;
         }
         // 返回旧的原始值
         return T; 
      }
};
int main()
{
   Time T1(11, 59), T2(10,40);

   ++T1;                    // T1 加 1
   T1.displayTime();        // 显示 T1
   ++T1;                    // T1 再加 1
   T1.displayTime();        // 显示 T1

   T2++;                    // T2 加 1
   T2.displayTime();        // 显示 T2
   T2++;                    // T2 再加 1
   T2.displayTime();        // 显示 T2
   return 0;
}

在这里插入图片描述

2.7 赋值 运算符重载

#include <iostream>
using namespace std;

class Distance
{
   private:
      int feet;             // 0 到无穷
      int inches;           // 0 到 12
   public:
      // 所需的构造函数
      Distance(){
         feet = 0;
         inches = 0;
      }
      Distance(int f, int i){
         feet = f;
         inches = i;
      }
      void operator=(const Distance &D )
      { 
         feet = D.feet;
         inches = D.inches;
      }
      // 显示距离的方法
      void displayDistance()
      {
         cout << "F: " << feet <<  " I:" <<  inches << endl;
      }

};
int main()
{
   Distance D1(11, 10), D2(5, 11);

   cout << "First Distance : "; 
   D1.displayDistance();
   cout << "Second Distance :"; 
   D2.displayDistance();

   // 使用赋值运算符
   D1 = D2;
   cout << "First Distance :"; 
   D1.displayDistance();

   return 0;
}

在这里插入图片描述

2.8 函数调用() 运算符重载

#include <iostream>
using namespace std;

class Distance
{
   private:
      int feet;             // 0 到无穷
      int inches;           // 0 到 12
   public:
      // 所需的构造函数
      Distance(){
         feet = 0;
         inches = 0;
      }
      Distance(int f, int i){
         feet = f;
         inches = i;
      }
      // 重载函数调用运算符
      Distance operator()(int a, int b, int c)
      {
         Distance D;
         // 进行随机计算
         D.feet = a + c + 10;
         D.inches = b + c + 100 ;
         return D;
      }
      // 显示距离的方法
      void displayDistance()
      {
         cout << "F: " << feet <<  " I:" <<  inches << endl;
      }

};
int main()
{
   Distance D1(11, 10), D2;

   cout << "First Distance : "; 
   D1.displayDistance();

   D2 = D1(10, 10, 10); // invoke operator()
   cout << "Second Distance :"; 
   D2.displayDistance();

   return 0;
}

在这里插入图片描述

2.9 下标[ ] 运算符重载

#include <iostream>
using namespace std;
const int SIZE = 10;

class safearay
{
   private:
      int arr[SIZE];
   public:
      safearay() 
      {
         register int i;
         for(i = 0; i < SIZE; i++)
         {
           arr[i] = i;
         }
      }
      int& operator[](int i)
      {
          if( i > SIZE )
          {
              cout << "索引超过最大值" <<endl; 
              // 返回第一个元素
              return arr[0];
          }
          return arr[i];
      }
};
int main()
{
   safearay A;

   cout << "A[2] 的值为 : " << A[2] <<endl;
   cout << "A[5] 的值为 : " << A[5]<<endl;
   cout << "A[12] 的值为 : " << A[12]<<endl;

   return 0;
}

在这里插入图片描述

2.10 类成员访问-> 运算符重载

  • 类成员访问运算符( -> )可以被重载,但它较为麻烦。它被定义用于为一个类赋予"指针"行为。 运算符 -> 必须是一个成员函数。如果使用了 -> 运算符, 返回类型必须是指针或者是类的对象
  • 运算符 -> 通常与指针引用运算符 * 结合使用,用于实现"智能指针"的功能。这些指针是行为与正常指针相似的对象,唯一不同的是,当我们通过指针访问对象时,它们会执行其他的任务。比如,当指针销毁时,或者当指针指向另一个对象时,会自动删除对象。
  • 间接引用运算符 -> 可被定义为一个一元后缀运算符。也就是说,给出一个类:
class Ptr{
   //...
   X * operator->();
};

类 Ptr 的对象可用于访问类 X 的成员,使用方式与指针的用法十分相似。例如:

void f(Ptr p )
{
   p->m = 10 ; // (p.operator->())->m = 10
}

语句 p->m 被解释为 (p.operator->())->m。

  • 实例
// 演示如何重载类成员访问运算符 ->
#include <iostream>
#include <vector>
using namespace std;

// 假设一个实际的类
class Obj {
   static int i, j;
public:
   void f() const { cout << i++ << endl; }
   void g() const { cout << j++ << endl; }
};

// 静态成员定义
int Obj::i = 10;
int Obj::j = 12;

// 为上面的类实现一个容器
class ObjContainer {
   vector<Obj*> a;
public:
   void add(Obj* obj)
   { 
      a.push_back(obj);  // 调用向量的标准方法
   }
   friend class SmartPointer;
};

// 实现智能指针,用于访问类 Obj 的成员
class SmartPointer {
   ObjContainer oc;
   int index;
public:
   SmartPointer(ObjContainer& objc)
   { 
       oc = objc;
       index = 0;
   }
   // 返回值表示列表结束
   bool operator++() // 前缀版本
   { 
     if(index >= oc.a.size() - 1) return false;
     if(oc.a[++index] == 0) return false;
     return true;
   }
   bool operator++(int) // 后缀版本
   { 
      return operator++();
   }
   // 重载运算符 ->
   Obj* operator->() const 
   {
     if(!oc.a[index])
     {
        cout << "Zero value";
        return (Obj*)0;
     }
     return oc.a[index];
   }
};

int main() {
   const int sz = 10;
   Obj o[sz];
   ObjContainer oc;
   for(int i = 0; i < sz; i++)
   {
       oc.add(&o[i]);
   }
   SmartPointer sp(oc); // 创建一个迭代器
   do {
      sp->f(); // 智能指针调用
      sp->g();
   } while(sp++);
   return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1135774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

众和策略可靠吗?股权除息是好是坏?

可靠 股权除息&#xff0c;指的是公司在股息发放前&#xff0c;将公司股票分拆&#xff0c;以减少股东持有的股份&#xff0c;添加每股的股息金额。简略来说&#xff0c;就是将股份拆成更小的比例&#xff0c;每股股息也随之添加。 股权除息关于股东来说&#xff0c;好坏参半…

YB5302是一款工作于2.7V到6.5V的PFM升压型双节锂电池充电控制集成电路

YB5302 锂电输入升压型双节锂电池充电芯片 概述: YB5302是一款工作于2.7V到6.5V的PFM升压型双节锂电池充电控制集成电路。YB5302采用恒流和准恒压模式(Quasi-CVT™)对电池进行充电管理&#xff0c;内部集成有基准电压源&#xff0c;电感电流检测单元&#xff0c;电池电压检测电…

第二证券:企业债转常规后受理审核进入常态化运行阶段

第一批14单项目获受理 拟征集资金估计超550亿元 14单项目是企业债转常规后第一批受理的项目&#xff0c;标志企业债的受理、审理、发行等作业进入常态化运转阶段&#xff0c;企业债的审理透明度与功率将有用改善 沪深北证券生意所网站10月25日宣布的信息显现&#xff0c;14单…

CAN接口的PCB Layout规则要求汇总

随着时代高速发展&#xff0c;控制器局域网&#xff08;CAN&#xff09;接口的应用越来越广泛&#xff0c;尤其是在汽车电子、航空航天等领域中发挥着重要作用&#xff0c;为了确保CAN接口的可靠性和稳定性&#xff0c;工程师必须在其PCB Layout方面下功夫&#xff0c;下面来看…

酷开科技 | 酷开系统时时刻刻相伴你左右

作家张小娴曾说过一句话&#xff1a;陪伴&#xff0c;是最长情的告白。每个人都需要别人的陪伴&#xff0c;每个人也都要陪伴别人。无论是亲情、友情还是爱情&#xff0c;陪伴永远是这世间一切感情中最不可或缺的一部分。同样&#xff0c;酷开系统通过各种功能及大内容战略陪伴…

绩效考核有什么好处?除了考核员工外?

绩效考核的真正作用&#xff0c;根本不在”考核员工“&#xff01;绩效考核的真正作用只有一个—— 辅助企业经营目标的达成。 只不过是因为企业想到达成这个经营目标&#xff0c;光靠老板是不可能的&#xff0c;必须靠”员工“&#xff0c;所以说考核员工只是手段&#xff0…

ITSS信息技术服务运行维护标准符合性证书申请详解及流程

ITSS信息技术服务运行维护标准符合性证书 认证介绍 ITSS&#xff08;InformationTechnologyServiceStandards,信息技术服务标准&#xff0c;简称ITSS)是一套成体系和综合配套的信息技术服务标准库&#xff0c;全面规范了IT服务产品及其组成要素&#xff0c;用于指导实施标准化…

【文件加密软件】文字+视频超详细解析

文件加密软件是一种用于保护文件安全的工具&#xff0c;可以有效地防止未经授权的访问和数据泄露。随着信息化的不断发展&#xff0c;文件加密软件已成为企业和个人不可或缺的安全保障之一。 一、需求分析 文件加密软件的需求主要包括功能、性能和易用性等方面。 1、软件应具…

「实用技巧」后端如何使用 Eolink Apikit 快速调试接口?

程序员最讨厌的两件事&#xff1a; 写文档 别人不写文档 写文档、维护文档比较麻烦&#xff0c;而且费时&#xff0c;还会经常出现 API 更新了&#xff0c;但文档还是旧的&#xff0c;各种同步不一致的情况&#xff0c;从而耽搁彼此的时间&#xff0c;大多数开发人员不愿意写…

PDF编辑工具Acrobat Pro DC 2023中文

Acrobat Pro DC 2023是一款全面、高效的PDF编辑和管理软件。它提供了丰富的PDF编辑功能&#xff0c;如创建、编辑、合并、分割、压缩、旋转、裁剪等&#xff0c;让用户可以轻松处理各种PDF文档。同时&#xff0c;该软件还具有智能的PDF处理技术&#xff0c;可以自动识别和修复P…

智慧实验室系统云LIS全套源码,满足医院实验室、医院集团、独立实验室、临检中心及其它检验机构的专业化检验需求。

​电子化检验信息平台 智慧实验室系统云LIS全套源码 LIS系统是医院信息管理的重要组成部分之一&#xff0c;集申请、采样、核收、计费、检验、审核、发布、质控、查询、耗材控制等检验科工作为一体的网络管理系统。LIS系统不仅是自动接收检验数据&#xff0c;打印检验报告&…

query,body传参

query我记得还有一种方式不用这样一个一个拼接的&#xff0c;一下子想不起来了&#xff0c;后续想到了加。 query传参&#xff1a; body传参

buuctf_练[MRCTF2020]Ezaudit

[MRCTF2020]Ezaudit 掌握知识 ​ 网站源码泄露&#xff0c;代码审计&#xff0c;SQL注入的万能密码使用&#xff0c;mt_rand函数的伪随机数漏洞搭配php_mt_seed工具使用&#xff0c;随机数特征序列的生成 解题思路 打开题目链接&#xff0c;又发现是一个不错的网站界面&…

关于一篇端口聚合配置的笔记

1. 端口聚合概述 端口聚合也称为以太通道(Ethernet Channel)&#xff0c;主要用于交换机间连接。由于两个交换机之间有多条几余链路的时候&#xff0c;STP会将其中的几条链路关闭&#xff0c;只保留一条&#xff0c;这样可以避免二层环路的产生。 但是&#xff0c;这样失去了路…

一致性哈希算法原理

文章目录 前言正文一、抛砖引玉&#xff0c;简单Hash算法的短板二、一致性Hash算法的基本概念2.1 一致性Hash算法本质也是取模2.2 便于理解的抽象&#xff0c;哈希环2.3 服务器如何映射到哈希环上2.4 对象如何映射到哈希环上&#xff0c;并关联到对应的机器 三、一致性Hash算法…

基于Java的民宿酒店预约推广系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

腾讯云服务器价格计算器,它来了!

腾讯云推出云服务器CVM专用计算器&#xff0c;选择云服务器CPU内存、CVM实例规格、系统盘、公网带宽即可一键计算出精准报价&#xff0c;腾讯云价格计算器&#xff0c;它来了&#xff0c;它来了&#xff01; 腾讯云服务器价格计算器可以一键计算出云服务器的精准报价&#xff…

什么是外贸电商ERP?外贸电商ERP有哪些

得益于互联网技术的发展成熟&#xff0c;外贸电商行业也迎来新的发展机遇&#xff0c;不过由于行业的特殊性&#xff0c;涉及多渠道营销、多汇率核算、多税制、多语言、多货币等情况&#xff0c;随着业务量的增加&#xff0c;相关数据的统计分析工作也愈加繁重。 外贸电商采用…

git的实际操作

文章目录 删除GitHub上的某个文件夹克隆仓库到另一个仓库 删除GitHub上的某个文件夹 克隆仓库到另一个仓库 从原地址克隆一份裸板仓库 –bare创建的克隆版本库都不包含工作区&#xff0c;直接就是版本库的内容&#xff0c;这样的版本库称为裸版本库 git clone --bare ****(原…

QT mqtt 在子线程中使用

qtmqtt 在子线程中使用_qt在子线程里mqtt无法new-CSDN博客文章浏览阅读524次。解决问题&#xff1a;QMqttClient - connection not made from another thread在qt中使用多线的qtmqtt客户端发送接收数据_qt在子线程里mqtt无法newhttps://blog.csdn.net/qq_35708970/article/deta…