【C++】入门必备小知识

news2025/1/19 20:30:16

C++入门

  • 1. 域
  • 2. 命名空间
    • 2.1命名空间的定义
    • 2.2 命名空间的使用
  • 3. C++输入和输出
  • 4. 缺省参数
  • 5. 函数重载
  • 6. 引用
  • 7. auto
  • 8. 范围for
  • 9.nullptr空指针
  • 10.内联函数


1. 域

  1. 域就是作用域,同一个域不可以用同名的变量,不同域可以用同名变量,遵循局部优先。域包括局部域、全局域、类域、命名空间域。其中我们学过局部域和全局域,类域和命名空间域后面会讲到。
  2. 域的访问
int a = 0;
int main()
{
	int a = 1;
	printf("%d", a);//a的作用域是局部域
	//如何打印全局域的a?
	//需要用到域作用限定符::
	printf("%d", ::a);
	return 0;
}

2. 命名空间

在C语言中,我们定义的变量、函数的名字在全局域可能与库中函数发生冲突,或者跟其他文件项目的变量名发生冲突。而C++的命名空间就可以解决这个问题。命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染

2.1命名空间的定义

namespace 命名空间的名字
{
	命名空间的成员
}
  1. 命名空间的成员可以是变量、函数、自定义类型。
//例子
namespace nanmu
{
	int a;
	void Swap(int*p1,int*p2)
	{
		int tmp = *p1;
		*p1 = *p2;
		*p2 = tmp;
	}
	struct student
	{
		char name[20];
		int age;
	}
}
  1. 命名空间可以嵌套定义
namespace N1
{
	int a;
	int b;
	namespace N2
	{
		int a;
		int b;
		int Add(int x,int y)
		{
			return x+y;
		}
	}
}
  1. 同一个工程允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间。例如一个.h文件和一个.c文件都定义了一个命名空间N1,最终都会合并成一个。
    注意
    名称相同的命名空间合并后有两个同名的变量/函数/自定义类型,就会报错(同一个作用域不可以用同名的函数)。怎么解决?再定义一个命名空间嵌套。

  2. 命名空间域是命名空间成员的作用域。

2.2 命名空间的使用

我们要如何使用命名空间的成员?以下是三种命名空间的使用方式:

  1. 使用using namespace 命名空间的名称(全部展开)
using namespace std;
//std是C++标准库的命名空间名,它包括C++库和STL(以后会学到)
int main()
{
	printf("hello,c++");
}

直接展开命名空间后,如果我们定义和库重名,就会发生冲突。所以就有第二和第三种方式。

  1. 使用using将命名空间的某个成员引入(展开某个)
using N1 a;
int main()
{
	printf("%d",b);
}
  1. 使用命名空间+作用域限定符+成员访问
int main()
{
	printf("%d",N::a);
}

结论:直接展开有风险,我们定义如果跟库重名,就会报错。建议项目里面不要展开,日常练习可以直接展开。


3. C++输入和输出

using namespace std;
#include<iostream>
int main()
{
	int a = 0;
	cin >> a;//从键盘输入a
	cout << a << endl;//打印a到屏幕
	return 0;
}

cin是标准输入对象(键盘),cout是标准输出对象(控制台),endl是C++符号,表示换行输出,<<是流插入符号,>>是流提取符号。< iostream >是cin、cout、endl的头文件。

  1. 跟C语言的输入输出对比(scanf,printf),C++的输入输出更方便,不用手动控制格式,C++会自动识别变量类型
int main()
{
	char a;
	int b;
	double c;
	cin >> a >> b >> c;
	cout << "char:" << a << endl << "int:" << b << endl << "double:" << c << endl;
	return 0;
}

在这里插入图片描述

  1. scanf要快于C++的输入(cin)。原因是C++兼容C,要在缓冲区兼顾C和C++的输入。

4. 缺省参数

如果我们在函数传参时,忘记传实参或者少传参了怎么办?C语言会报错,而C++提出了缺省参数。

  1. 概念
    缺省参数(又叫默认参数)是在函数声明和定义时为函数参数指定一个缺省值(默认值)。
  2. 作用
    在函数传参时,如果没有指定实参就使用该参数的缺省值。如果给定实参就不使用
int Add(int x = 1, int y = 1)
{
	return x + y;
}
int main()
{
	int ret = Add();
	cout << ret << endl;
	return 0;
}

结果
在这里插入图片描述

  1. 分类
//全缺省参数(所有参数都给缺省值)
void Func1(int a = 10, int b = 20, int c = 30)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
}
//半缺省参数(缺省部分参数)(至少需要传一个参数)
void Func2(int x , int y = 2)
{
	cout << "x = " << x << endl;
	cout << "y = " << y << endl;
}
int main()
{
	Func1();
	Func2(2);
	return 0;
}

结果
在这里插入图片描述

  1. 注意
    (1)我们给参数缺省值的时候,必须从右往左给,因为我们传参时是从左往右传。
    (2)缺省参数不能在函数声明和定义中同时出现。如果我们声明和定义的函数参数的缺省值不一样,编译器就无法确定哪个才是真正的缺省值。
    (3)那么声明和定义都给相同的缺省值?还是只给一个缺省值就够了?答案是只给一个就够了。那么是声明给缺省值,还是定义给缺省值?答案是声明给缺省值。定义给缺省值就会报错,在编译阶段,文件会包含头文件,此时头文件中的函数声明未给缺省参数,就会报错,所以是声明给。
    (4)缺省值必须给常量或者全局变量
    在这里插入图片描述
  2. 应用
struct Stack
{
	int* a;
	int top;
	int cap;
};
void StackInit(struct Stack* p, int capa = 10)
{
	……
}
int main()
{
	struct Stack s1;
	StackInit(&s1,100);//如果我们已知道要建立一个大小为100的栈,这时就直接将参数传过去
	struct Stack s2;
	StackInit(&s2);//如果不知道要创建大小为多少的栈,这时可以不传参,用缺省值
	return 0;
}

5. 函数重载

  1. 概念
    C++允许同一作用域出现同名函数,这些函数的参数个数、参数类型、参数顺序不同,构成功能类型的重载函数。(对函数的返回值没有要求,可相同可不同)
//函数重载
int Add(int x, int y)
{
	return x + y;
}
double Add(double x, double y)
{
	return x + y;
}
int main()
{
	int ret1 = Add(1, 2);
	double ret2 = Add(1.5, 2.5);
	cout << "ret1 = " << ret1 << endl;
	cout << "ret2 = " << ret2 << endl;
	return 0;
}

结果
在这里插入图片描述

  1. 分类
//1.参数类型不同
int Add(int x, int y)
{
	return x + y;
}
double Add(double x, double y)
{
	return x + y;
}

//2.参数个数不同
void Func1(int a)
{
	cout << "Func1(int a)" << endl;
}
void Func1(int a, int b)
{
	cout << "Func1(int a,int b)" << endl;
}

//3.参数顺序不同
void Func2(int a, double b)
{
	cout << "Func2(int a,double b)" << endl;
}
void Func2(double a, int b)
{
	cout << "Func2(double a ,int b)" << endl;
}
  1. 注意
    (1)调用歧义
vodi f()
{
	cout<<"void f()"<<endl;
}
void f(int a = 0)
{
	cout<<"void f(int a = 0)"<<endl;
}
int main()
{
	f();
}

首先,f()和f(int a =0)是重载函数。但是,你能明白f()调用哪个函数吗?它既可以解释为不传参的函数,此时它调用的是有缺省值的函数;也可以理解为无参数的函数,此时它调用的是无参数的函数。两个都可以调用就存在歧义,编译器就会报错。
(2)函数名问题

void f(int a,int b)
{
	……
}
void f(int b,int a)
{
	……
}

这是否构成函数重载?不构成,这并不是函数参数的顺序不同,它跟形参的名字不同无关。

  1. 为什么C++支持函数重载?
    后面补上。

6. 引用

  1. 概念
    引用就是给一个变量取别名,既然是别名,那么和变量名一样都是指这个变量,所以引用变量和变量共用一块内存空间
int main()
{
	int a = 0;
	int& b = a;//b是a的别名
	cout << &a << endl;
	cout << &b << endl;
	return 0;
}

打印结果
在这里插入图片描述

  1. 特点
//1.引用在定义的时候必须初始化
int main()
{
	int a = 10;
	int& b;//错误的
	int& b = a;
}
//2. 一个变量可以有多个引用
int main()
{
	int a = 0;
	int &b = a;
	int &c = b;
	int &d = a;
	//如果b++,c++,d++,那么a也会++。因为他们都是共用同一块空间。
}
//3. 引用一旦引用其他变量,就不能再引用其他变量
int main()
{
	int a = 10;
	int&b = a;
	int c = 20;
	b = c;//这里是将d变成c的引用?还是将c赋值给d?
	//答案是将c的值赋值给b
}
  1. 应用
void Swap(int& x, int& y)
{
	int tmp = x;
	x = y;
	y = x;
}
int main()
{
	int x = 10;
	int y = 20;
	Swap(x, y);
	return 0;
}

形参是实参的别名(形参和实参共用一块内存空间),对形参的改变就是对实参的改变

  1. 适用场合
//1.做参数
void Swap(int& x, int& y)
{
	int tmp = x;
	x = y;
	y = x;
}
//好处:(1)形参的改变引起实参的改变;(2)提高效率,对于一些比较大的参数
//2.做返回值
int count()
{
	int n = 0;
	n++;
	return n;
}
//n返回时会生成临时变量,再返回。原因是变量出了作用域就销毁。

//如果返回的是静态变量呢?
int count()
{
	static int n = 0;
	n++;
	return n;
}
//此时变量出了作用域就不销毁了,但还是会临时变量。
//不管是局部变量还是临时变量,如果是传值返回,都会生成临时变量。

//那怎样才能不生成临时变量?不生成临时变量有什么用?
//(1)使用传引用返回,就不会生成临时变量。(2)减少拷贝,提高效率。如果返回是大对象,效率会提高得更明显。

//此时引用做返回值的好处就体现出来:减少拷贝,提高效率。
int& count()
{
	static int n = 0;
	n++;
	return n;
}

//疑问:如果count中的n是局部变量,不是静态变量,还可以用引用返回码?
//答案:不可以。局部变量出了作用域就销毁了,会非法访问,结果不可知。如果函数结束,函数栈帧销毁,没有清理栈帧,那么n的值侥幸是正确的。
int main()
{
	int& ret = count();
	return 0;
}

总结
(1)基本任何形参都可以用引用传参。
(2)谨慎引用做返回值。出了函数作用于,对象不在就不能引用返回,还在就可以用引用返回。正确的样例:静态变量,全局变量。

  1. 常引用(重点)
//常引用
int main()
{
	const int a = 10;
	int& b = a;//错误的。引用过程中,权限不能放大。a不能改变,却可以通过b来改变a,这是错误的。

	const int c = 10;
	int d = c;//正确的。这是一份拷贝,d的值的改变不影响c的值。

	int x = 0;
	int& y = x;//正确的。权限的平移。
	const int& z = x;//正确的。权限的缩小。引用过程中,权限可以平移或者缩小
	++x;//正确的。//缩小的是z作为别名的权限,x的权限不缩小。
	//此时z是否会发生变化?z也会发生变化,不能通过z修改x,但x改变,z是x的别名,也会随之改变。

	const int& m = 10;//正确的。因为常量具有常属性,不可以通过m改变10。

	double e = 1.11;
	int ii = e;//正确的。这是一份拷贝。但在拷贝过程中有类型转换,此时会产生临时变量。
	int& iii = e;//错误的。iii放大了权限,因为临时变量具有常性。e首先产生临时变量,再赋值给iii。
	const int& iii = e;//正确的。此时相当于权限的平移。

	return 0;
}

常引用还体现函数的返回值

int func1()
{
	static int x = 10;
	return x;
}
int& func2()
{
	static int x = 10;
	return x;
}
int main()
{
	int& ret1 = func1();//错误的。func1返回的是x的拷贝,是临时变量,具有常属性,此时相当于权限的放大
	const int& ret2 = func1();//正确的。权限的平移。
	int ret1 = func1();//正确的。返回一份拷贝。
	//注意:只有引用时才有权限的放大、缩小和平移。


	int& ret3 = func2();//正确的。权限的平移。
	const int& ret4 = fun2();//正确的。权限的缩小。
	return 0;
}

注意
只有类型转换的时候才会产生临时变量,相同类型不会产生临时变量。

  1. 引用和指针的区别
    (1)相同点
	int a = 10;
	int& aa = a;//在语法层面上,引用不开空间,是对a取别名
	int* pa = &a;//在语法层面上,指针开空间,存储a的地址

但在底层实现上,引用是类似指针的方式实现的。
在这里插入图片描述
(2)不同点

  1. 在概念上,引用定义一个变量的别名,指针存储一个变量的地址。
  2. 引用在定义式必须初始化,指针没有要求。
  3. 引用在初始化时引用一个实体后不能再引用其他实体,而指针可以在任何时候指向任何一个实体。
  4. 没有空引用,但有空指针。(但有野引用和野指针)。
  5. sizeof(引用)==引用类型的大小,sizeof(指针) ==4/8字节。
  6. 引用+1,实体就+1;指针+1,就往后偏移一个类型大小的距离。
  7. 有多级指针,但没有多级引用。
  8. 访问实体方式不同,指针需要显示解引用,引用编译器自己处理。
  9. 引用相对于指针而言更安全和便利。

7. auto

  1. 概念
    auto是一个类型指示符,用来自动识别类型。
  2. 例子
//auto关键字
int main()
{
	int a = 10;
	auto b = 20;
	auto c = 3.14;
	auto d = 'H';
	cout << typeid(b).name() << endl;//打印类型
	cout << typeid(c).name() << endl;
	cout << typeid(d).name() << endl;
	return 0;
}

打印结果
在这里插入图片描述

  1. 注意
    (1)使用auto时必须初始化,auto能自动识别类型的本质是在编译阶段,编译器根据初始化表达式推导出变量的实际类型,然后将auto替换。
    (2)当auto在同一行定义多个变量时,要保持这些变量必须是相同的类型,否则编译器会报错。原因是编译器只推导第一个变量的类型,然后用推导出的类型定义其他变量。
int main()
{
	auto a = 1, b = 2, c = 3;//正确的
	auto x = 3.14, y = 4;//错误的
	return 0;
}

(3)当auto声明指针类型时,auto*和auto没有区别,但当auto声明引用类型时,就必须带上&。

	int a = 1;
	auto b = &a;
	auto* c = &a;
	auto& d = b;
	cout << typeid(b).name() << endl;
	cout << typeid(c).name() << endl;
	cout << typeid(d).name() << endl;

打印结果
在这里插入图片描述

(4)auto不能作为函数的参数
编译器无法对形参的实际类型进行推导
在这里插入图片描述
(5)auto不能直接用来声明变量
在这里插入图片描述

  1. 应用
    auto通常用来代替复杂的类型,还可以与范围for配合使用。

8. 范围for

  1. 概念
//范围for
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	for (auto e : arr)
		cout << e << " ";
	return 0;
}

打印结果
在这里插入图片描述
(1)从一个范围确定的数组中取出元素放在e中,然后打印,不管数组中元素的类型。这就是范围for。
(2)它会自动迭代,自动判断结束。
(3)for后面的括号分为两部分,冒号前是循环的变量,冒号后是循环的范围。
(4)这里的e是临时变量的名称,可以随便取。
(5)如果循环过程中要改变数组的内容,就得用引用类型,因为e是arr元素的临时拷贝,不改变arr。

for(auto&e:arr)
	e+=1;
  1. 注意
    for循环的范围必须是确定的。对于数组而言,范围就是第一个元素和最后一个元素。

9.nullptr空指针

NULL在C语言被定义为空指针,但在C++被定义为字面常量0。如下面的例子
在这里插入图片描述
所以就有了nullptr,它表示空指针。


10.内联函数

  1. 引入
int Add(int x, int y)
{
	return x + y;
}
int main()
{
	for (int i = 0; i < 10000; i++)
	{
		cout << Add(i, i + 1) << endl;
	}
	return 0;
}

Add循环10000就需要建立10000个函数栈帧,如果要减少建立栈帧的次数,要如何解决?
用宏定义,宏的优点:不需要建立栈帧,提高调用效率。
但考虑到宏的缺点:(1)复杂、容易出错(2)可读性差,不能调试。所以C++推出内联函数。

  1. 定义
    用inline修饰的函数叫做内联函数。编译时C++编译器会在调用内联函数的地方展开,这样就没有函数调用产生的开销,提高运行效率。
inline int Add(int x, int y)//在函数钱前面+inline
{
	return x + y;
}
  1. 疑问
    是不是所有的函数都可以用内联函数?
    并不是。inline也有适用范围:短小的频繁调用的函数。函数太长会导致代码膨胀。
    例子

假设有一个函数Func(),编译后有50条指令。如果有一个项目在10000个位置调用该函数。
(1)第一种情况:Func不是内联函数,合计多少条指令?
项目中每个调用Func的地址都只有一条调用指令call,一共10000+50条指令。
(2)第二种情况:Func是内联函数,合计多少条指令?
Func每次调用都被展开,所以一共10000*50条指令。那么这个可执行程序就变大(例:安装包变大,或者升级程序变大)。
所以并不是所有的函数都可以变成内联函数。

  1. inline对于编译器仅仅是个建议,最终是否成为内联函数,由编译器决定。像比较长的函数、递归函数+inline后就会被编译器否决掉。

  2. inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址,链接就会找不到。

  3. 默认debug下面,inline不会起作用,否则函数都被展开了,无法进入函数,不方便调试。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/532350.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

案例11:Java超市管理系统设计与实现开题报告

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

5年时间里,自动化测试于我带来的意义,希望你也能早点知道

摘要&#xff1a;在我有限的软件测试经历里&#xff0c;曾有一段专职的自动化测试经历。 接触自动化 那时第一次上手自动化测试&#xff0c;团队里用的是Python&#xff0c;接口自动化测试的框架是requestsExcelJenkins&#xff0c;APP自动化测试的框架是Appium。 整个公司当…

寻找差值结构的最优顺序

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点&#xff0c;AB训练集各由6张二值化的图片组成&#xff0c;让A中有6个1 差值结构的每行只能是二进制的3&#xff0c;6&#xff0c;5..3列每列1的数量为1&#xff0c;2&#xff0c;3.B中全是0&#xff0c;排列组合…

“记录新时代 奋进新征程”省市主流媒体共赴省交通集团在建项目采风

近日&#xff0c;浙江省省市13家主流媒体集中走进杭绍甬高速杭绍段绍兴侧路面施工现场、杭金衢高速联络线PPP项目中村大桥及杨家山隧道等施工现场&#xff0c;近距离感受在建工程的标准化施工、数字化赋能以及产业工人队伍打造。 标准化、数字化齐头并进&#xff0c;保障路面施…

脂溶性荧光染料Cy7标记羧酸Cy7-COOH/Carboxylic acids星戈瑞

CY7-COOH是一种含有羧基的化合物&#xff0c;它的分子式为C37H45ClN2O2&#xff0c;分子量519.12。其化学结构中包含有一个吲哚菁骨架&#xff0c;以及一个羧基&#xff08;COOH&#xff09;官能团。它的分子式为C37H45ClN2O2&#xff0c;分子量519.12。CY7-COOH是一种近红外荧…

热烈祝贺百华鞋业通过山东省专精特新企业认定!

近日&#xff0c;山东省工业和信息化厅公布了山东省2023年度专精特新中小企业名单&#xff0c;百华鞋业荣誉上榜&#xff01; 专精特新中小企业是指具有“专业化、精细化、特色化、新颖化”特征的中小企业&#xff0c;多专注于产业链上某个环节&#xff0c;主营业务聚焦&#…

Three.js--》实现3d小岛模型搭建

目录 项目搭建 初始化three.js基础代码 设置环境背景 设置水面样式 添加天空小岛 今天简单实现一个three.js的小Demo&#xff0c;加强自己对three知识的掌握与学习&#xff0c;只有在项目中才能灵活将所学知识运用起来&#xff0c;话不多说直接开始。 项目搭建 本案例还…

AR和VR技术的进展和应用:如何为移动应用开发添加更多趣味和体验?

章节一&#xff1a;引言 作为一名移动应用开发者&#xff0c;我一直致力于为用户提供创新和令人兴奋的体验。随着技术的不断发展&#xff0c;AR和VR技术成为了实现这一目标的有力工具。无论是增强现实还是虚拟现实&#xff0c;它们都能够将虚拟世界与现实世界相结合&#xff0…

可移动磁盘“未格式化”提示?教程帮你重获数据!

可移动磁盘在使用的过程中会出现各种奇怪的错误&#xff0c;比如小编今天碰到的一个&#xff0c;打开分区提示未格式化&#xff01;可移动磁盘“未格式化”提示&#xff1f;教程帮你重获数据&#xff01; 可移动磁盘“未格式化”提示&#xff1f;教程帮你重获数据&#xff01; …

【新星计划·2023】常用的5种VLAN的划分方式,你知道几种?

在说VLAN划分方式之前&#xff0c;先来说一说什么是VLAN&#xff1f;为什么需要划分VLAN&#xff1f; 一、什么是VLAN VLAN(Virtual Local Area Network)即虚拟局域网&#xff0c;是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。每个VLAN是一个广播域&#xff0c;VLA…

我还是劝你别去外包,干了4年,废了.....

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

AVUE样式、刷新、字典、清空搜索条件等操作

1、操作栏、表格样式的控制 2、下拉框字典的设置 3、日期格式的设置 const dateFormat function(row, value) { if (!value) return ; let format YYYY-mm-dd; let date new Date(value); const dataItem { Y: date.getFullYear().toString(), m: (date.ge…

使用midjourney搞出一套三国人物画像!

当下已进入如火如荼的全民AI时代&#xff0c;最近体验了下midjourney&#xff0c;使用它的以图生图功能生成出来一套三国人物画像&#xff0c;和大家分享下使用心得。 使用midjourney的准备工作 下载工具 使用midjourney生产图片依赖的工具和流程&#xff0c;大致如下&#x…

Parasoft和TASKING联手提供卓越的汽车软件开发和自动化测试

​​Parasoft与TASKING宣布建立合作 2023年4月26日&#xff0c;全球嵌入式软件测试解决方案领导者Parasoft宣布与汽车嵌入式软件开发工具行业领导者TASKING建立合作伙伴关系。Parasoft和TASKING的合作为汽车行业提供了一套完整的软件全生命周期解决方案&#xff0c;通过CI/CD工…

Shell基础学习---2、运算符、条件判断、流程控制

1 、运算符 1、基本语法 “$((运算式))”或‘“$[运算式]” 2、案例实操 2 、条件判断 1、基本语法 &#xff08;1&#xff09;test condition &#xff08;2&#xff09;[ condition ] &#xff08;注意condition前后要有空格&#xff09; 注意&#xff1a;条件非空即为tr…

批量域名综合信息查询-域名批量注册查询软件

域名综合信息查询 域名是一个网站的重要组成部分&#xff0c;它直接影响着网站的流量和排名。对于网站管理者来说&#xff0c;了解域名的综合信息是非常重要的。为了便于管理者查询和了解域名的综合信息&#xff0c;147SEO提供了免费的域名综合信息查询服务。下面&#xff0c;…

案例9:Java公益物资分配系统设计与实现开题报告

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

k8s系列-eureka部署集群

1.基本信息 2.容器信息 容器镜像名称: xxxx:30002/dmp/eureka:2022.10.08.14.39.17 环境变量 参数名称 参数值 eureka.instance.hostname ${HOSTNAME}.dmp-eureka-cloud eureka.instance.prefer-ip-address false eureka.client.service-url.defaultZone http://dmp-eureka…

CLLC谐振变换器的基波分析

CLLC谐振变换器_基波分析 目录 CLLC谐振变换器_基波分析 目录电路图FHA分析基于FHA的电路增益特性分析 电路图 FHA分析 输入电压FHA分析 谐振输入假设为理想方波 V i ( t ) 4 V i n π ∑ n 1 , 3 , 5... ∞ 1 n s i n ( 2 π n f s t ) V_{i}(t)\frac{4Vin}{\pi}\sum_…

拓尔微芯片TMI33421在家电上的应用、特点及概述

TMI33421是拓尔微最新推出的一款30V, 2A 同步降压DC-DC转换器&#xff0c;在效率和可靠性方面表现俱佳。 高效率&#xff1a;最高可达95% TMI33421是一颗同步降压转换器&#xff0c;将2颗MOS管集成在芯片内部&#xff0c;实现更小的功率损耗&#xff0c;在2A的正常工作电流下&…