C++学习笔记(六)---类和对象【下】

【C++】类和对象 类和对象 阅读详情

【知识预告】

  1. 再谈构造函数
  2. Stack成员
  3. 友元
  4. 内部类
  5. 匿名函数
  6. 再次理解封装

1 再谈构造函数

1.1 构造函数体赋值

在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。

class Date
{
public:
	Date(int year, int month, int day)
	{
		_year = year;
		_month = month;
		_day = day;
	}

private:
	int _year;
	int _month;
	int _day;
};

虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量的初始化,构造函数体中的语句只能将其称为赋初值,而不能称作初始化。因为初始化只能初始化一次,而构造函数体内可以多次赋值。

1.2 初始化列表

初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个**"成员变量"后面跟一个放在括号中的初始值或表达式**。

class A
{
public:
	A(int a)
		:_a(a)
	{}

private:
	int _a;
};

class Date
{
public:
	// 初始化列表是每个成员定义的地方
	// 不管写不写,每个成员都要走初始化列表
	Date(int year, int month, int day, int& i)
		: _year(year)
		, _month(month)
		, _x(1)  // const成员变量只能在初始化列表里面初始化
		, _refi(i)  // 这里定义的_refi是i的别名
		, _a(1)
	{
		// 这里是赋值
		_day = day;  // 也可以混着用

		//_x = 1;  // 报错
	}

	void func()
	{
		// 这里的_refi也是n的别名
		++_refi;
		++_refi;
	}

private:
	int _year;
	int _month = 1;  // 初始化列表里面_month被赋值了,就不会用1
	int _day = 1;
	// C++11支持给缺省值,缺省值是给初始化列表的
	// 如果初始值没有显示给值,就用这缺省值
	// 如果显示给值,就不用这个缺省值
	
	// 上面初始化列表里面_day没有给值
	// 那么初始化就是使用默认的1,去初始化_day

	// 必须在定义的时候初始化
	const int _x;
	int& _refi;
	A _a;
};

int main()
{
	int n = 0;
	Date d1(2023, 7, 28, n);

	d1.func();
	cout << n << endl;   // 2

	return 0;
}

【注意】

  1. 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)
  2. 类中包含以下成员,必须放在初始化列表位置进行初始化:
    - 引用成员变量
    - const成员变量
    - 自定义类型成员(且该类没有默认构造函数时)
  3. 尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使用初始化列表初始化。
  4. 成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关。

来个例题:

class A
{
public:
    A(int a)
       :_a1(a)
       ,_a2(_a1)
   {}
    
    void Print() {
        cout<<_a1<<" "<<_a2<<endl;
   }
private:
    int _a2;
    int _a1;
};
int main() {
    A aa(1);
    aa.Print();
}

A. 输出1 1
B.程序崩溃
C.编译不通过
D.输出1 随机值

再来个面试题:实现一个类,计算程序中创建出了多少个类对象。

// 累积创建了多少个对象
int n = 0;

// 正在使用的还有多少个对象
int m = 0;

class A
{
public:
	A()
	{
		++n;
		++m;
	}

	A(const A& t)
	{
		++n;
		++m;
	}

	~A()
	{
		--m;
	}
private:
};

A Func(A aa)
{
	return aa;
}

int main()
{
	A aa1;
	A aa2;
	cout << n << " " << m << endl;  // 2  2

	A();
	cout << n << " " << m << endl;  // 3  2

	Func(aa1);  // 传值过去时拷贝构造一次,传值回来时又会拷贝构造一次
	cout << n << " " << m << endl;  // 5  2

	return 0;
}

上述写法有一个缺点,就是全局变量可能被外面随意修改。

2 Stack成员

2.1 概念

声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的成员函数,称之为静态成员函数。静态成员变量一定要在类外进行初始化。

重新实现一个类,计算程序中创建出了多少个类对象。(上面的代码优化一下)

class A
{
public:
	A()
	{
		++n;
		++m;
	}

	A(const A& t)
	{
		++n;
		++m;
	}

	~A()
	{
		--m;
	}

	// 静态成员函数的特点:没有this指针
	static void Print()
	{
		cout << m << " " << n << endl;
	}

private:
	// 静态成员变量属于所有A对象,属于整个类
	// 声明
	// 累积创建了多少个对象
	static int n;

	// 正在使用的还有多少个对象
	static int m;
};

// 这里是定义(声明和定义分离)
int A::n = 0;
int A::m = 0;

A Func(A aa)
{
	return aa;
}

int main()
{
	A();
	A();
	
	// 类域可以直接调用了
	A::Print();  // 0  2
	// 正在使用0个对象,累积创建两个对象

	A aa1;
	Func(aa1);

	aa1.Print(); //  1  5

	return 0;
}

2.2 特性

  1. 静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区
  2. 静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明
  3. 类静态成员即可用类名::静态成员 或者 对象.静态成员来访问
  4. 静态成员函数没有隐藏的this指针,不能访问任何非静态成员
  5. 静态成员也是类的成员,受public、protected、private 访问限定符的限制

3 友元

友元提供了一种突破封装的方式,有时提供了便利。但是友元会增加耦合度,破坏了封装,所以友元不宜多用。
友元分为:友元函数和友元类

class Date
{
	// 友元声明可以定义在类里面的任意位置
	friend ostream& operator<<(ostream& out, const Date& d);
	friend istream& operator>>(istream& out, Date& d);

public:
	Date(int year = 1, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}

	void Print()
	{
		cout << _year << "/" << _month << "/" << _day << endl;
	}

private:
	// 内置类型
	int _year;
	int _month;
	int _day;
};

// cout << d1;
// 想访问类里面的私有成员
// 就必须加友元声明
ostream& operator<<(ostream& out, const Date& d)
{
	out << d._year << "/" << d._month << "/" << d._day << endl;
	return out;
}

istream& operator>>(istream& in, Date& d)
{
	// 默认用换行和空格分割
	in >> d._year >> d._month >> d._day;
	return in;
}

int main()
{
	Date d1(2024, 9, 29);
	Date d2(2024, 9, 30);

	cout << d1 << d2;

	cin >> d1;
	cout << d1;

	return 0;
}

3.1 友元函数

友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明,声明时需要加friend关键字。

注意:

  • 友元函数可访问类的私有和保护成员,但不是类的成员函数
  • 友元函数不能用const修饰
  • 友元函数可以在类定义的任何地方声明,不受类访问限定符限制
  • 一个函数可以是多个类的友元函数
  • 友元函数的调用与普通函数的调用原理相同

3.2 友元类

友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。

  • 友元关系是单向的,不具有交换性。
  • 友元关系不能传递
    例如:如果C是B的友元, B是A的友元,则不能说明C时A的友元。
  • 友元关系不能继承
class Time
{
	// 声明日期类为时间类的友元类,则在日期类中就直接访问Time类中的私有成员变量
	friend class Date;
public:
	Time(int hour = 0, int minute = 0, int second = 0)
		: _hour(hour)
		, _minute(minute)
		, _second(second)
	{}

private:
	int _hour;
	int _minute;
	int _second;
};
class Date
{
public:
	Date(int year = 1900, int month = 1, int day = 1)
		: _year(year)
		, _month(month)
		, _day(day)
	{}

	void SetTimeOfDate(int hour, int minute, int second)
	{
		// 直接访问时间类私有的成员变量
		_t._hour = hour;
		_t._minute = minute;
		_t._second = second;
	}

private:
	int _year;
	int _month;
	int _day;
	Time _t;
};

注意:上述Time类和Date类,在Time类中声明Date类为其友元类,那么可以在Date类中直接访问Time类的私有成员变量,但想在Time类中访问Date类中私有的成员变量则不行。

4 内部类

概念:如果一个类定义在另一个类的内部,这个内部类就叫做内部类。内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。
内部类就是外部类的友元类,内部类可以通过外部类的对象参数来访问外部类中的所有成员。但是外部类不是内部类的友元。

// 1、B类受A类域和访问限定符的限制,其实它们是两个独立的类
// 2、内部类默认就是外部类的友元类
class A
{
public:
	class B
	{
	public:
		void FuncB()
		{
			A aa;
			aa._a = 1;
		}
	private:
		int _b;
	};

private:
	int _a;

};

int main()
{
	cout << sizeof(A) << endl;   // 4

	A aa;
	A::B bb1;

	return 0;
}

5 匿名对象

class A
{
public:
	A(int i)
		:_a(i)
	{
		cout << "A(int i)" << endl;
	}

	~A()
	{
		cout << "~A()" << endl;
	}
private:
	int _a;
};

int main()
{
	double d = 1.1;
	int i = d;  // 不会报错

	//int& j = d; // 报错,中间会生成一个临时变量(具有常性)
	const int& j = d; // 不报错

	// 有名对象 特点:生命周期在当前局部域
	A aa1(6);

	// 不能这么定义对象,因为编译器无法识别下面是一个函数声明,还是对象声明
	// A aa1();

	// 匿名对象 特点:生命周期只在这一行
	A(7);

	return 0;
}

6 再次理解类和对象

现实生活中的实体计算机并不认识,计算机只认识二进制格式的数据。如果想要让计算机认识现实生活中的实体,用户必须通过某种面向对象的语言,对实体进行描述,然后通过编写程序,创建对象后计算机才可以认识。比如想要让计算机认识洗衣机,就需要:

  1. 用户先要对现实中洗衣机实体进行抽象—即在人为思想层面对洗衣机进行认识,洗衣机有什么属性,有那些功能,即对洗衣机进行抽象认知的一个过程。
  2. 经过1之后,在人的头脑中已经对洗衣机有了一个清醒的认识,只不过此时计算机还不清楚,想要让计算机识别人想象中的洗衣机,就需要人通过某种面相对象的语言(比如:C++、Java、Python等)将洗衣机用类来进行描述,并输入到计算机中。
  3. 经过2之后,在计算机中就有了一个洗衣机类,但是洗衣机类只是站在计算机的角度对洗衣机对象进行描述的,通过洗衣机类,可以实例化出一个个具体的洗衣机对象,此时计算机才能明本洗衣机是什么东西。
  4. 用户就可以借助计算机中洗衣机对象,来模拟现实中的洗衣机实体了。

在类和对象阶段,一定要体会到,类是对某一类实体(对象)来进行描述的,描述该对象具有那些属性,那些方法,描述完成后就形成了一种新的自定义类型,采用该自定义类型就可以实例化具体的对象。

用AI生成React/Vue页面?实测Locofy等5款工具,教你选最适合的 本文深度评测了2024年五大AI生成前端页面工具,包括Locofy、Builder.io等,从代码质量、可视化编辑器成本到企业级落地方案进行全面分析。通过实测数据和实战案例,揭示如何利用AI生成技术高效创建React/Vue页面,提升开发效率并优化性能。 阅读详情

相关推荐

CKAD-CN 考试知识点分享(2) CronJob

成功创建 CronJobppi,每 5 分钟执行一次计算任务;配置了和;设置,超时自动终止;确保 Pod 不重启;手动创建ppi-testJob 验证功能正常;所有任务要求均已满足。

轻的博客 331

内部类(static内部类)的定义与使用、与子类、接口有关匿名类的定义与使用

Java内部类的定义: 在一个类中定义另一个类,这样的类称为内部类,而包含内部类的类称为外嵌类,所以内部类也是外嵌类的一种成员; 内部类要点: 1、 Java内部类的使用: Java匿名内部类的定义: Java匿名内部类的使用: ...

LagerSwan的博客 3330

让AI稳定生成流程图:基于Skill与Mermaid的工程化实践

流程图是软件工程中沟通业务逻辑的通用语言,但其绘制与维护却长期依赖手工工具,导致文档更新滞后、协作成本高。随着大语言模型技术的成熟,自然语言生成代码已成为可落地的技术路径,而Mermaid作为一款文本化图表语法,凭借其可版本管理、可自动渲染和可嵌入文档的优势,正逐步取代传统绘图工具。要让AI稳定输出合格的流程图,关键在于为模型定义一套清晰的Skill规则,约束输入结构、处理逻辑和输出格式。本文从流程图的工程痛点出发,介绍如何利用大模型将自然语言描述转化为结构化文本,再通过Mermaid CLI渲染成可视化图

weixin_42548782的博客 312

static 关键字-内部类

文章目录一、static 关键字1.1 静态域1.2 静态常量1.3 静态方法1.4 静态内部类二、 内部类2.1 成员内部类2.2 局部内部类2.3 匿名内部类 一、static 关键字 1.1 静态域     如果把域定义成 static,每个类中只有一个这样的域,而每个对象 对于 所有的实例域 却都有自己的一份 拷贝 。比如: 需要给每个雇员赋予唯一的标识码: class Employee { private static int nextID=1; priva

weixin_41750142的博客 438

pytorch中dataloader的num_workers参数

结论速递 在Windows系统中,num_workers参数建议设为0,在Linux系统则不需担心。 1 问题描述 在之前的任务超大图上的节点表征学习中,使用PyG库用于数据加载的DataLoader,ClusterLoader等类时,会涉及到参数num_workers。在不同系统环境试验该参数的设定值时,会出现不同的结果 colab(Linux),设为12 有warning message,提示num_workers参数设置不合理,不影响继续运行 /usr/local/lib/python3.7/di

qq_40990057的博客 1万+

智能变电站协议系列-1、GOOSE、SV、MMS协议简介及GOOSE示例运行问题(IEC61850)

目前有一个新的研究,关于电网使用的GOOSE、SV、MMS协议,并使用相关库来做一下测试。由于goose、sv、mms等都属于IEC61850,因此,需要对IEC61850相关内容有一些了解,都是国际标准,属于电气自动化的一部分,对于自动化或者电气相关领域有接触的专业应该或多或少有一些了解。IEC61850目标是用于变电站自动化、分布式能源、水力和天然气发电厂、风力发电厂、电动汽车作为分布式能源等领域,目前似乎在变电站自动化方面的推广和使用更加广泛。

逍遥游的博客 2万+

「C++ 类和对象篇 13」友元和内部类

一、友元是什么? 二、为什么需要友元? 三、怎么使用友元? 四、友元的特性 五、内部类 【总结】

look_outs的博客 965

Microsoft Dynamics 365软件二次开发:Dynamics365部署与版本控制策略

在Microsoft Dynamics 365中,自定义实体允许开发者扩展系统以满足特定业务需求。自定义实体可以包含字段、选项集、关系和其他属性,与标准实体类似,但完全由用户定义。1. 登录到Dynamics 365环境。2. 转到“解决方案”区域,选择“自定义”。3. 在“自定义”菜单中,选择“实体”。4. 点击“新建”,输入实体名称,例如“客户反馈”。5. 添加字段,如“反馈类型”、“反馈日期”、“描述”等。6. 设置主键和唯一标识符。7. 定义关系,如与“客户”实体的关联。

kkchenjj的博客 2208

C++友元和内部类

一、友元 1.1 友元分为:友元函数和友元类 友元提供了一种突破封装的方式,有时提供了便利。但是友元会增加耦合度,破坏了封装,所以友元不宜多用。 1.2 友元函数:友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明,声明时需要加friend关键字。 说明: ① 友元函数可访问类的私有成员,但不是类的成员函数 ② 友元函数不能用const修饰 ③ 友元函...

晶凌玄夜的博客 425

【Android逆向工程】第17章:反调试与反 Hook 对抗技术

本文介绍了Android应用常见的反调试技术及其对抗策略。主要内容包括: 反调试技术概述 分类:进程检测(ptrace、TracerPid)、文件检测、行为检测(时间/断点)、内存检测、框架检测 对抗思路:识别检测点→Hook检测函数→修改返回值→隐藏工具特征 ptrace检测实现 原理:利用ptrace系统调用检测调试器附加 实现方式:直接检测、持续线程检测、fork子进程检测 绕过方法:Frida Hook ptrace函数返回0,或使用LD_PRELOAD注入假函数 综合防护 涉及多种检测技术的组合使

w987333120的博客 359

沁恒CH32V30X学习笔记02--GPIO的使用教程及2次封装驱动

刚复位后,GPIO 口运行在初始状态,这时大多数 IO 口都是运行在状态所有的 GPIO 口都可以被配置外部中断输入通道,但一个外部中断输入通道最多只能映射到一个GPIO 引脚上,且外部中断通道的序号必须和 GPIO 端口的位号一致,,两方都是一对一的关系。复用功能。

Car12 706

理解友元,内部类,static

1. 再谈构造函数 1.1 构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象各个成员变量一个合适的初始值 class Date { public: Date(int year, int month, int day) { _year = year; _month = month; _day = day; } private: int _year; int _m...

msn0812的博客 212

【RT-DETR实战】159、改进九:知识蒸馏从YOLOv8教师模型学习

摘要: 本文探讨了知识蒸馏在RT-DETR目标检测模型中的应用挑战与实践经验。作者以YOLOv8作为教师模型,针对特征对齐、损失函数设计和训练策略等核心问题,提出了适配器模块、动态权重调整和多阶段训练等优化方案。文章重点分析了教师模型选择、特征图匹配、损失函数组合等关键环节的实战技巧,并总结了蒸馏模型部署时的注意事项。通过实验验证,作者指出知识蒸馏应关注模型"思维方式"的迁移而非简单特征复制,并强调合理评估指标和教师模型选择的重要性。最后,作者分享了技术迭代中的边际效应认知,为工业场景下的模型优化提供了实用

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 268

C++学习笔记六--类和对象

C++中的类和对象。

我叫柱子哥 1209

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C++ 一些学习笔记(六)类和对象-封装

C++ 一些学习笔记(六)类和对象-封装主要是针对之前学习C的时候一些知识点的遗漏的补充,还有一些我自己觉得比较重要的地方。本文章的主要内容是关于封装的。类和对象1.封装2.struct和class的区别3.成员属性设置为私有 主要是针对之前学习C的时候一些知识点的遗漏的补充,还有一些我自己觉得比较重要的地方。 本文章的主要内容是关于封装的。 类和对象 C++面向对象的三大特性为:封装、继承、多态 C++认为万事万物皆为对象,对象有其属性和行为 1.封装 封装是C++面向对象三大特性之一 封装的意义: 将

baidu_41803143的博客 190

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C++学习笔记(六)-- 类和对象 构造函数和析构函数 const成员函数 this指针 对象数组 堆栈管理变量

C++学习笔记之六,本文为C++ Primer Plus 第十章对象和类的学习笔记,大抵分为以下几个小部分: 类Class的用法 类的构造函数和析构函数: const成员函数 this指针 对象数组 堆栈管理变量

朱铭德的博客 1371

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

c++类和对象

全文将讲解《类和对象》,文章比较长,请慢慢观看!

includeevey的博客 8696

【C++类和对象】类和对象的引入

C++中通过类可以将数据以及操作数据的方法进行完美结合,通过访问权限可以控制哪些方法在类外可以被调用,即封装,在使用时就像使用自己的成员一样,更符合人类对一件事物的认知。

Renswc的博客 2672

【Cpp】类和对象

类的认识,类和对象(一)

石墨博客 1175

【c++】cpp类和对象

c++中类和对象基本用法

hutaotaotao的博客 1269

【C++】认识类和对象

学习C语言时,我们就经常听说C语言是面向过程的,那么什么是面向过程呢?举个例子,我们现在要完成洗衣服的工作,此刻我们关注的是洗衣服的过程:拿个盆子;接水;放衣服;到洗衣粉C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是面向对象的,关注的是对象,在解决问题时,通过对象间的交互来完成,每个对象负责不同的工作。//...类的主体:由成员函数和成员变量组成//一定要注意后面的分号如上所示,类的定义与结构体的定义非常相似,但我们还是得认识几个专有名词。

Aron的博客 2230

C++类和对象详解

类与对象上篇: 主要内容: 1.类和对象的区别。 2.类的定义。 3.类的访问限定符和封装 4.类的作用域 5.类的实例化(用类类型创建对象) 6.计算类对象的大小 7.this指针 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。 1.类和对象的区别: 类是抽象的,不占用内...

weixin_43730061的博客 8151

C++类和对象

目录 C++类和对象 1. 类的引入 C++对于struct的升级 1.结构体可以做类型 2.里面可以定义函数 2. 类的定义 类的两种定义方式 3. 类的访问限定符及封装 3.1.访问限定符 3.2.封装 4. 类的作用域 5. 类的实例化 6. 类对象模型 6.1. 计算类对象的大小 6.2. 类的多文件写法 2. this指针 3. 类的6个默认成员函数 3.1.构造函数 3.1.1 概念 3.1.2 特性 3.1.3explicit...

原来45的博客 2204

Cpp类和对象(上)(3)

哈哈,类和对象可以说是我们正式学习Cpp的第一节课上篇还不算很难,甚至可以说还是蛮有意思的正文开始!声明和定义全部放在类体中请注意,成员函数如果在类中定义,编译器可能会将其当成内联函数处理声明放在头文件(.h)中,定义放在源文件(.cpp)中请注意,成员函数名前需要加 “类名::”一般情况下,更期望采用第二种方式,因为这样体现了面对对象编程的封装特性提高代码的可维护性你再看上面这两段代码的成员变量,你可能奇怪为什么每个变量前都有个下划线_,这是为了与成员函数的形参区分开class Date。

tan180°的博客 2668

C++学习笔记——类和对象(上)

再深入一些的讲,函数指针是⼀个地址,调⽤函数被编译成汇编指令[call 地址],其实编译器在编译链接时,就要找到函数的地址,而不是在运⾏时找(当然也有例外,动态多态是在运行时找的,就需要存储函数地址,这个之后会说)所以总而言之,对象的存储方式大概如下图所示。类实例化出的每个对象,都有独⽴的数据空间,但对象中只包含成员变量的空间(因为不同的对象,成员变量的值通常是不同的)而不包含成员函数,因为后者作为函数,只需要分配一份空间就能保证复用性,为每一个对象都分配空间则会造成浪费。,这不是造成了空间浪费吗?

ajole的博客 1264
上一篇: C++学习笔记(五)---【类与对象】(中)
下一篇: 【C/C++内存管理】
和尚爱梳头
博客等级 码龄3年 371粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值