美文网首页
Android NDK开发:运算符重载与友元函数

Android NDK开发:运算符重载与友元函数

作者: itfitness | 来源:发表于2021-02-28 12:09 被阅读0次

目录

运算符重载

利用操作符重载我们可以实现两个对象的运算,使用的是operator关键字,使用规则是:

返回值 operator 运算符(对象A,对象B) {
    具体操作
}

具体使用如下:

#include<stdlib.h>
#include<stdio.h>
#include<iostream>
//自定义的String类
class String
{
public:
    std::string str;
    String(std::string val) {
        this->str = val;
    }
    //由于在类的内部定义的重载,所以默认会有当前类的引用
    String operator +(const String& val) {
        //进行两个字符串的拼接
        String newStr(this->str + val.str);
        return newStr;
    }
};
void main() {
    String str1("字符串1");
    String str2("字符串2");
    String str3 = str1 + str2;
    std::cout << str3.str << std::endl;
    system("pause");
}

当然运算符的重载也可以放在类的外面:

#include<stdlib.h>
#include<stdio.h>
#include<iostream>
//自定义的String类
class String
{
public:
    std::string str;
    String(std::string val) {
        this->str = val;
    }
};
String operator +(const String& val1,const String& val2) {
    //进行两个字符串的拼接
    String newStr(val1.str + val2.str);
    return newStr;
}
void main() {
    String str1("字符串1");
    String str2("字符串2");
    String str3 = str1 + str2;
    std::cout << str3.str << std::endl;
    system("pause");
}

效果都是一样的



当然也可以进行++和--,如下:

#include<stdlib.h>
#include<stdio.h>
#include<iostream>
//自定义的String类
class String
{
public:
    std::string str;
    String(std::string val) {
        this->str = val;
    }
};
//++放在对象前面会执行这个方法
void operator ++(String& val) {
    val.str = val.str + val.str;
}
//++放在对象后面会执行这个方法
void operator ++(String& val,int){
    val.str = val.str + val.str;
}
void main() {
    String str1("字符串1");
    str1++;
    //++str1;
    std::cout << str1.str << std::endl;
    system("pause");
}

友元函数

友元函数的目的是为了方便访问类的私有属性,用的是friend关键字,如下:

#include<stdlib.h>
#include<iostream>
class Student
{
private:
    int age;
public:
    //函数声明
    friend void changeAge(Student& stu, int age);
};

void changeAge(Student &stu,int age) {
    stu.age = age;
}
void main() {
    system("pause");
}

如果将类内声明的changeAge函数删除的话,由于age是私有属性,所以外部的changeAge中就会报错:



当然也可以设置一个友元类,友元类的方法也是可以修改类的私有属性的:

#include<stdlib.h>
#include<iostream>
class Student
{
private:
    int age;
public:
    friend class Teacher;
};
class Teacher
{
public:
    void changeStuAge(Student& stu, int age) {
        stu.age = age;
    }
};
void main() {
    system("pause");
}

相关文章

  • Android NDK开发:运算符重载与友元函数

    目录 运算符重载 利用操作符重载我们可以实现两个对象的运算,使用的是operator关键字,使用规则是: 具体使用...

  • C++ 部分运算符重载

    可重载的运算符 不可重载的运算符和符号 重载运算符为类的成员函数 重载运算符为友元函数 重载赋值运算符 重载流插入...

  • 日记之旅第七天

    上午:重点讲解了函数重载,其中包括运算符重载,函数成员重载。运算符重载结合了昨天所讲的友元函数一起使用 下午:复习...

  • 第十一章 使用类(3)重载运算符

    (三)重载运算符: 1.作为友元非成员函数还是成员函数 两个操作数的运算符,如果运算符重载是成员函数版本,那么第...

  • 9.22总结

    一.知识点总结 1.运算符重载关键字operator 类型为重载运算符的返回类型 2.最常见的是友元函数与重载运算...

  • 15.C++泛型

    模板函数 模板类 函数模板和友元函数 注意,只在重载左移右移运算符的时候使用友元函数,其他都不要用,友元函数容易导...

  • 11. 匿名对象、隐式构造、默认构造函数

    一.匿名对象 二.隐士构造函数 三. 四,友元函数 五.内部类 六.运算符重载

  • c++——函数符号重载2-15

    一般情况下,单目运算符最好重载为类的成员函数;双目运算符则最好重载为类的友元函数。以下一些双目运算符不能重载为类的...

  • C++运算符重载形式--成员函数or友元函数?

    1.C++操作符重载形式---成员函数or友元函数 1.对运算符重载,需要坚持四项基本原则:不可臆造运算符;运算符...

  • C++派生类的友元函数,派生类的析构函数

    一、赋值兼容 运算符重载函数需要访问父类的私有成员,运算符重载函数是父类的友元函数,子类继承了父类,子类也可以使用...

网友评论

      本文标题:Android NDK开发:运算符重载与友元函数

      本文链接:https://www.haomeiwen.com/subject/dzhgfltx.html