楠取名字

编程相关

C++ this指针/静态成员函数/友元函数/友元类/操作符重载

this指针

如下有一个成员函数:

int getK() const
{
    this->m_k = 100;  //this指针不是Test const*型指针,但函数名尾部出现const时出错
    this++;  //error,因为this指针是一个常指针,Test *const
    return this->m_k;
}

如果成员函数尾部出现const时,修饰this指针

静态成员函数

  1. 静态成员函数的意义,不在于信息共享,数据沟通,而在于管理静态数据成员,完成对静态数据成员的封装。
  2. 静态成员函数只能访问静态数据成员。原因:非静态成员函数,在调用时this指针被当做参数进行。而静态成员函数属于类,而不属于对象,没有this指针。

友元函数

当在类的外边定义一个函数,这个函数要使用类的私有成员,那么就要在类的public下用以下的方式声明此函数,让这个函数成为类的友元函数

friend double test(类名 &对象);

友元类

在类B的成员函数中要使用类A的私有成员,那么在类A的public下就要声明类B为类A的友元类。

class A
{
   public:
     A(int a)
     {
         this->a = a;
     } 
     friend class B;
   private:
     int a;
};  

class B
{
    public:
     B(int b)
     {
         this->b = b;
     }
     void PrintA()
     {
         A objA(10);
         cout << objA.a << endl;
     }
    private:
     int b;
};
  • 注意:
    1. 友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类B中是否有类A的相应声明。
    2. 友元关系不能被继承。
    3. 友元关系不具有传递性。

操作符重载

背景:C++编译器对普通变量的加法运算你可以识别,但是如果我们自定义俩对象相加,编译器就不能识别了。
* 注意:操作符重载写全局时,在类中要用友元声明(“operator+”构成一个函数名)
举例:(实现复数相加)
下面这段函数实现了加法的操作符重载。

Plural operator+(Plural &c1,Plural &c2)
{
    return Plural temp(c1.a+c2.a,c1.b+c2.b);
}

利用上面这段函数实现完整的俩对象相加:

#include "stdafx.h"
using namespace std;

class Plural
{
public:
    Plural(int a, int b)
    {
        this->a = a;
        this->b = b;
    }
    friend Plural operator+(Plural &c1, Plural &c2);
    void Printplural()
    {
        cout << "(" << this->a << ", " << this->b << "i)" << endl;
    }
private:
    int a;
    int b;
};

Plural operator+(Plural &c1, Plural &c2)
{
    Plural temp(c1.a + c2.a, c1.b + c2.b);
    return temp;
}

int main()
{
    Plural p1(1, 2);
    Plural p2(3, 4);
    p1.Printplural();
    p2.Printplural();
    Plural p3 = p1 + p2; //等于p3 = operator+(p1,p2);
    p3.Printplural();
    return 0;
}

这里写图片描述

阅读更多
文章标签: C++笔记
个人分类: 笔记
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

C++ this指针/静态成员函数/友元函数/友元类/操作符重载

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭