C++类的一些使用和说明

# -1.VS使用类的一个骚操作
创建一个头文件后,我们把类塞进去,类里面的任意成员函数单击选中点“快速操作和重构”即可将该函数的使用整到另一个cpp*文件中去,我们即可在cpp*文件中对该函数展开来写,这样就可以让类的内部整洁一些。

# 0.默认构造函数没有返回值

# 1.默认构造参数的问题
BOX();
BOX(int a,int b,int c);
//这种写法一点问题没有
BOX();
BOX(int a=1,int b=1,int c=1);
//这种写法有问题,因为给每个参数默认值实际上相当于默认构造函数。

# 2.默认构造函数内部调用
BOX(int a,int b,int c);
BOX():BOX(2, 4, 6) { std::cout << "hello class!" << std::endl; } ;
无参默认函数调用有参默认函数,{ std::cout << "hello class!" << std::endl; }是无参默认函数的功能

# 3.类对象的复制
BOX MyBOX;
BOX MyBOX2{ MyBOX };
采用这种形式进行对MyBOX2进行复制时,则不再对其进行初始化,也就是不在调用构造函数

# 4.访问私有成员(其实很简单,但还是写一下)
利用类的公有区域可以调用私有成员的特性,写个函数即可,比如:
int diaoyong() { return a; };

# 5.一个类里面专属的东西,"this"
this是一个关键字,它指向当前的对象,比如说我调用MyBOX(),其实在调用的时候就有这个this
先讲一个引例:
{
private:
    int a=1;
    int b=2;
    int c=3;
public:
    BOX();
    ~BOX();
    int volumn()
    {
        return this->a * this->b * this->c;
    }
};
int main()
{
    BOX TEST;
    std::cout<<TEST.volumn()<<std::endl;
}
//这个this在我们使用TEST.volumn的时候就等效于TEST的地址
来一个进阶例子:

先看类的文件:
#include <iostream>
class BOX
{
public:
    BOX(int a,int b,int c);
    BOX():BOX(2, 4, 6) { std::cout << "hello class!" << std::endl; } ;
    //构造函数
    ~BOX();
    //析构函数
    int volumn()
    {
        return a * b * c;
    }
    BOX* geta(int a1);
    BOX* getb(int b1);
    BOX* getc(int c1);

private:
    int a{ 1 };
    int b{ 2 };
    int c{ 3 };
};

再看类的函数定义的文件:
#include "HTEST.h"

BOX::BOX(int a1, int b1, int c1)
{
    std::cout << "CLASS NUMBER INIT!" << std::endl;
    a = a1;
    b = b1;
    c = c1;
}

BOX::~BOX()
{
}

BOX* BOX::geta(int a1)
{
    a = a1;
    return this;
}

BOX* BOX::getb(int b1)
{
    b = b1;
    return this;
}

BOX* BOX::getc(int c1)

    c = c1;
    return this; 
}

最后看实现的文件:
#include "HTEST.h"

int main()
{
    BOX MyBOX;
    std::cout << MyBOX.geta(2)->getb(3)->getc(4) << std::endl;
    std::cout << MyBOX.volumn() << std::endl;
    return 0;
}

运行结果:
CLASS NUMBER INIT!
hello class!
0000009C6C6FF768
24
分析:最开始是两个初始化,无参调用有参,有参初始化的内容弹出来后又弹了无参,刚才有写
第三个弹出来的明显是一段地址,我们看主函数的第二行,和类定义文件中的内容,发现我让他返回了一些this,而大家再看类文件,发现定义的类型是BOX*。刚才已经说过,this代表当前使用对象的地址或者说指针,那么我相同的地址其实也就相当于我这个对象的指针,理所当然的可以继续调用我这个对象里面的函数,最后我不在调用更多,但仍然返回了我这个对象的地址,这就是0000009C6C6FF768出现的原因!大家可以把我的代码粘贴走试验下。
24是因为我调用这三个函数的过程中给a,b,c都赋值了,调用了一下volunm函数计算出了24这个结果。
还是不明白直接联系我!

# 6.友元函数
不分公有、私有、保护进行访问
在被友元的类的部分声明:friend int test(const BOX& a)//参数就是初始化的对象
使用:test(对象)
注意:test不属于类成员

# 7.友元类
在被友元的类的部分声明:friend class DADONG;

# 8.静态变量
定义在类的公有区域:static inline int count{};
把count++扔到类的某个函数中就可以知道整个程序带哦用该函数多少次;
 

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值