【C++】函数的静态变量 ,this,友元函数,重载

本文详细探讨了C++中的关键概念,包括类中的静态变量存储机制,this指针的作用及其在成员函数中的使用,友元函数的概念,以及重载的多种方式,如运算符重载、赋值重载等,旨在深化对C++特性的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:在类中的的静态成员,存放在代码段,编辑器并不给该段的数据分配空间,只是记录数据所需空间的大小。数据段存放经过初始化的全局和静态变量。

#include <iostream>

using namespace std;

// 静态成员变量  static
// 1、静态成员不属于某个对象,是类的属性,是所有对象共享的属性
// 2、静态成员变量必须在类的外部进行初始化
// 3、静态成员 可以通过类名直接使用

// 静态的成员函数:只能使用静态成员,不能使用类的普通成员
class Test
{
public:
    void show()
    {
        printf ("a = %d, b = %d, sa = %d\n", _a, _b, _sa);
    }

    static void print()
    {
        // show();
        printf ("sa = %d\n", _sa);// 静态的成员函数:只能使用静态成员,不能使用类的普通成员
    }
public:
    int _a;
    int _b;
    static int _sa;//静态变量在数据区不占用空间
};
int Test::_sa = 10;// 2、静态成员变量必须在类的外部进行初始化

int main1()
{
    cout << sizeof(Test) << endl;//int类型占用4个字节,而静态变量不占用所以是8个字节
    Test t1, t2;
    cout << t1._sa << endl;//作为静态变量类的属性,类中所有成员使用同一个静态变量
    cout << t2._sa << endl;//所有给对象t1的sa赋值就等于给t2的sa赋值
    t1._sa = 123;//给t1的sa赋值等于给其他成员的sa赋值
    cout << t2._sa << endl;

    cout << Test::_sa << endl;// 3、静态成员 可以通过类名直接使用

    t1._a = 1;
    t1._b = 2;
    t1.show();

    Test::print();


    return 0;
}

class Test1
{
private:
    Test1(){}//私有构造函数,

public:
    static Test1 *create()
    {
        Test1 *pt = new Test1;//新建一个test1类型的空间,初始化指针Pt1
        return pt;//在成员函数内可以使用私有函数,new的过程会自动调用构造函数
    }
};

int main()
{

      //Test1 t;//私有构造函数不能创建对象
    Test1 *t1 = Test1::create();//这里创建一个指针,被指针Pt的地址赋值(静态函数成员可以直接类调用)
    //由于静态函数调用不需要对象,直接用类调用,所以可以通过静态函数达到创建对象调用构造函数的效果


    return 0;
}

二:this指针

this在成员函数的开始执行前构造的,在成员的执行结束后清除。

类中所有普通成员函数都有一个指向当前对象的常指针,c++有一个关键字this ,专门用来表示这个指针

在类的普通成员函数,可以直接用this操作当前对象。

在c语言中我们这样实现类似类的操作

static int _sa;

struct Test
{
	int _a;
    int _b;
};//相当于类中的私有成员

void Test_init(Test *const this, int a, int b)
{
	this->_a = a;
	this->_b = b;
}//类中的构造函数,在c语言还有一个形参就是this指针,由this调用结构体中的私有成员

void Test_show(Test *const this)
{
	printf ("a = %d, b = %d, sa = %d\n", this->_a, this->_b, _sa);
}//类中普通的成员函数这里,是没有形参,但这里有this指针指向当前对象

static void Test_print()//类中的静态成员函数,在c语言中做全局函数,不需要this指针,所以在c++中可以直接用类调用
{
	printf ("sa = %d\n", _sa);
}

Test t1
Test_init(&t1, 1, 2);//t1的地址传给this指针

Test t2
Test_init(&t2, 1, 2);//将t2d的指针地址传给this指针

Test_show(&t1);
Test_show(&t2);

在C++ 中的写法

#include <iostream>

using namespace std;


// 类的普通成员函数 都拥有一个隐藏的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值