首页 > 编程语言 >C++ 一元运算符重载

C++ 一元运算符重载

时间:2024-03-02 21:02:21浏览次数:34  
标签:一元 obj Distance int C++ 运算符 重载 feet

一元运算符只对一个操作数进行操作,下面是一元运算符的实例:

一元运算符通常出现在它们所操作的对象的左边,比如 !obj、-obj 和 ++obj,但有时它们也可以作为后缀,比如 obj++ 或 obj--。

下面的实例演示了如何重载一元减运算符( - )。

 1 #include <iostream>
 2 using namespace std;
 3  
 4 class Distance
 5 {
 6    private:
 7       int feet;             // 0 到无穷
 8       int inches;           // 0 到 12
 9    public:
10       // 所需的构造函数
11       Distance(){
12          feet = 0;
13          inches = 0;
14       }
15       Distance(int f, int i){
16          feet = f;
17          inches = i;
18       }
19       // 显示距离的方法
20       void displayDistance()
21       {
22          cout << "F: " << feet << " I:" << inches <<endl;
23       }
24       // 重载负运算符( - )
25       Distance operator- ()  
26       {
27          feet = -feet;
28          inches = -inches;
29          return Distance(feet, inches);   //想想这里为什么是这样
30       }
31 };
32 int main()
33 {
34    Distance D1(11, 10), D2(-5, 11);
35  
36    -D1;                     // 取相反数
37    D1.displayDistance();    // 距离 D1
38  
39    -D2;                     // 取相反数
40    D2.displayDistance();    // 距离 D2
41  
42    return 0;
43 }

结果

F: -11 I:-10
F: 5 I:-11

 

标签:一元,obj,Distance,int,C++,运算符,重载,feet
From: https://www.cnblogs.com/uacs2024/p/18049228

相关文章

  • C++第六节课 引用变量 指针的升级版
    #include<iostream>usingnamespacestd;//C++的引用是C指针的升级可以提高代码的稳定性和健壮性//const修饰的引用是常引用//函数传参实参向形参进行传递默认是值的传递这个是值的一个副本两个互不影响intadd(constint&a,constint&b){///a++;避......
  • C++ 重载运算符和重载函数 二元运算符重载
    C++允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型......
  • c++多线程按行读取同一个每行长度不规则文件
    对于非常大的比如上百G的大文件读取,单线程读是非常非常慢的,需要考虑用多线程读,多个线程读同一个文件时不用加锁的,每个线程打开一个独立的文件句柄多线程读同一个文件实现思路思路1先打开一个文件句柄,获取整个文件大小file_size确定要采用线程读取的部分大小read_size和......
  • c++多线程编程
    c++线程库:<thread>创建线程:需要可调用的函数或者函数对象作为线程入口点例:std::threadthreadname(function_name,args...)在C++中,当使用std::thread创建线程并传递类的成员函数时,需要使用&来获取成员函数的地址,同时还需要传递对象的指针(或引用)作为第一个参数。......
  • C++ 继承
    1//基类2classAnimal{3  //eat()函数4  //sleep()函数5};678//派生类9classDog:publicAnimal{10  //bark()函数11};基类&派生类一个类可以派生自多个类,这意味着,它可以从多个基类继承数据和函数。定义一个派生类,我......
  • C++ 类的静态成员
    原文可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态......
  • C++ 指向类的指针
    原文一个指向C++类的指针与指向结构的指针类似,访问指向类的指针的成员,需要使用成员访问运算符 ->,就像访问指向结构的指针一样。与所有的指针一样,在使用指针之前,对指针进行初始化。在C++中,指向类的指针指向一个类的对象,与普通的指针相似,指向类的指针可以用于访问对象的成员......
  • C++ 拷贝构造函数(初学有点难理解)
    拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于:通过使用另一个同类型的对象来初始化新创建的对象。复制对象把它作为参数传递给函数。复制对象,并从函数返回这个对象。如果在类中没有定义拷......
  • C++填坑系列——新手写代码易错点
    c++新手写代码的几个易错点学习自https://www.youtube.com/watch?v=i_wDa2AS_8w1.限制usingnamespacestd的作用范围如果你自己定义了一个和std空间内同名的函数,当你把std放到globalnamespace(也就是直接usingnamespacestd)中,就会出现函数冲突;usingnamespacestd的使......
  • C++填坑系列——万能引用+移动语义+完美转发
    模板编程中的万能引用、移动语义、完美转发万能引用:T&&,辅助模板编程,这样左值和右值的参数都可以接收;移动语义:std::move,转换为右值,也可结合移动构造函数和移动赋值使用;完美转发:std::forward,可以保留参数的左值和右值属性,因为后续使用该参数可能还需要这个属性;万能引用万能引......