C++【1】---基础入门

发布于:2025-07-27 ⋅ 阅读:(15) ⋅ 点赞:(0)

目录

概述

C++的第一个程序

命名空间

域的作用

namespace的使用

namespace的格式

namespace的介绍

namespace使用注意

补充

using关键字

情景一:全展开

情景二:部分展开

C++的输入&输出

缺省参数

分类

函数重载

引用

const引用

const的使用

const引用

指针和引用的关系

inline内联函数

nullptr

彩蛋时刻!!!

💫只有认知的突破💫才能带来真正的成长💫编程技术的学习💫没有捷径💫一起加油💫 

🍁感谢各位的观看🍁欢迎大家留言🍁咱们一起加油🍁努力成为更好的自己🍁

概述

这篇博客会先对C++的几个小语法进行讲解,以便来降低我们后续学习C++的门槛。这几个知识点比较琐碎一些,但都是我们后面学习C++的基础。

C++的第一个程序

按照学习编程的传统——写第一个代码 " hello world "。代码如下所示:

#define  _CRT_SECURE_NO_WARNINGS   1
#include <iostream>

int main()
{
	std::cout << "hello world" << std::endl;
	return 0;
}

运行结构如下所示:

命名空间

在C语言中,我们学到了局部域全局域。在C++中,会再新增两个域——命名空间域和类域

域的作用

<1>:域会影响变量的生命周期。

<2>:域会影响编译器的查找规则:在未特定声名某个域的前提下,编译器会默认先从局部域中查找变量,未找到的话,再从全局域中查找。

namespace的使用

namespace的格式

namespace的格式如下所示:

namespace 名字
{

    ...        
    ...
}

namespace的介绍

namespace是一个关键字,它是一个关于命名空间的关键字。

作用:<1>:命名空间的出现,就是为了避免命名重复的错误。

           <2>:命名空间所圈住的区域,在未指定该区域的时候,编译器在查找变量的时候会

                      自动跳过该区域。

展示作用<1>的效果代码:

在生成随机数中,我们会用到rand库函数,它被封装放在 <stdlib.h> 头文件里面。我们不使用namespace的情况下,直接再定一个rand变量,就会报错。当我们把rand变量放在namespace里面,就不会报错了。

如下所示的代码:——未使用namespace。

#define  _CRT_SECURE_NO_WARNINGS   1
#include <iostream>
#include <stdlib.h>
int rand = 20;
int main()
{
	std::cout << rand << std::endl;
	return 0;
}

运行结果如下所示:

 如下所示:——使用namespace。

#define  _CRT_SECURE_NO_WARNINGS   1
#include <iostream>
#include <stdlib.h>

namespace wwp
{
	int rand = 20;
}
int main()
{
	std::cout << rand << std::endl;	//打印的是函数的地址
	return 0;
}

运行结果如下:

namespace使用注意

<1>:namespace的{ }后面没有 '  ;  ' 。

<2>:namespace是可以嵌套使用的。

<3>:namespace可以定义在不同的文件中,只要命名空间的名字相同,编译器就会自动把名字相同的命名空间进行合并成一个命名空间。

<4>:namespace是为避免命名重复的,所以它是针对名字而言的。当namespace里面有结构体的时候,要注意结构体的使用——如下所示的代码:

#define  _CRT_SECURE_NO_WARNINGS   1
#include <iostream>

namespace wwp
{
	int rand = 20;
	struct wzp
	{
		int a;
	};
}
int main()
{
	struct wwp::wzp s1;		//放在struct后面
	s1.a = 30;
	std::cout << s1.a << std::endl;	//打印的是函数的地址
	return 0;
}

运行结果如下所示:

补充

命名空间域不影响变量的声明周期,只是影响编译器查找变量的规则。命名空间域里面的变量还是全局变量。

using关键字

using用于展开命名空间或者展开命名空间部分内容。

情景一:全展开

当你确定你的命名空间里面的内容不会与库或者其它程序员冲突时,便可以全展开。如下所示的代码:

#define  _CRT_SECURE_NO_WARNINGS   1
#include <iostream>
using namespace std;

namespace wwp
{
	int a = 20;
}

using namespace wwp;
int main()
{
	cout << a << endl;
	return 0;
}

如下所示的图片:

情景二:部分展开

当命名空间域里面的某些成员被频繁使用,而且这个成员还不冲突,我们可以部分展开它。书写格式:using namespace wwp : : a; 如下所示的代码:

#define  _CRT_SECURE_NO_WARNINGS   1
#include <iostream>
using namespace std;

namespace wwp
{
	int a = 20;
	int b = 90;
}

//using namespace wwp;
using wwp::a;	//部分展开
int main()
{
	cout << a << endl;
	cout << a << endl;
	cout << a << endl;
	return 0;
}

运行截图如下所示:

C++的输入&输出

在C++中,输出用的符号是:流插入(<<)===cout << 输入用的符号是:流提取(>>)==cin>>。其中,cout和cin分别是ostream和istream实例出的对象,<<和>>是运算符重。这里涉及到类和模板的知识,会在后面的章节讲到。如下所示的代码:

#include <iostream>
using namespace std;

int main()
{
	int a = 0;
	cin >> a;
	cout << a << endl;
	return 0;
}

运行截图如下所示:

缺省参数

在C语言中,我们是不可以给函数参数显示传值的。即:int add (int x=20 ,int y=30);在C语言中,是错误的。但在C++中,这是允许的。如下所示的代码:

#include <iostream>
using namespace std;

int add(int x = 1, int y = 2)    //缺省参数
{
	return x + y;
}
int main()
{
	cout << add() << endl;	//不显示传值,使用缺省值
	cout << add(10, 20) << endl;
	return 0;
}

当我们不显示传值的时候,函数就会使用给定缺省值,否则就是使用你显示给的值

运行截图如下所示:

分类

缺省参数分为:全缺省和半缺省。

全缺省:全部给缺省值。

半缺省:非全部给缺省值,部分参数给缺省值,而且必须从右向左给缺省值。

函数重载

当两个函数名相同的函数出现在同一个域中时,在C语言中就会报错,但在C++中不会报错,因为此时这俩函数构成了函数重载。

函数重载的条件:1.函数名相同。

                             2.出现在同一个域中。

                             3.参数类型,数量和顺序不同。

                             4.两个函数是否构成重载不看返回值。

 如下所示的代码:

#include <iostream>
using namespace std;

int add(int x = 1, int y = 2)
{
	return x + y;
}

float add(float x, float y)
{
	return x + y;
}
int main()
{
	cout << add(10,20) << endl;
	cout << add(4.5f,3.2f) << endl;
	return 0;
}

运行截图如下所示:

引用

引用就是给变量取别名,编译器不会为它开辟空间的,它和变量共用同一个内存空间。引用分为左值引用&右值引用&&如下所示的关系图:

通俗来讲——就是起外号。引用的符号——&。如下所示的代码:

int a=10;

int&b=a;  //b引用a,b是a的别名

 注意:1.引用必须初始化。即:int&b;是错误❌。int&b=a;才是正确✔

            2.引用的对象必须存在,不能空引用。

            3.引用在引用一个实体对象之后,不能再引用别的实体对象了。(也就是说:只能引                用 一个实体对象)。

const引用

const的使用

const修饰的对象具有常属性,不能被更该。如下所示的代码都具有const属性,必须要加const。

//情况一:类型转换
int b=20;
const float a=b;    //构造成float临时对象,临时对象具有const属性

//情况二:const对象
const int b=20;
const int a-b;

//情况三:返回值

int add(int x,int y)
{
    return x+y;
}

const int b+=add(1,5);       //返回值会存放在临时对象中或寄存器中,这俩都具有const属性

const引用

权限的注意:1.权限可以缩小。

                      2.权限可以转移。

                      3.权限不可以放大。

 如下所示的代码及其对应的情况:

const int a-10;
int b=a;        //error:权限放大

int a=10;
const int b=a;   //right:权限可以缩小

const int a=10;
const int b=a;    //right:权限可以平移

指针和引用的关系

重点:

1.语法上引用不开辟空间,指针需要开辟空间来存储地址。

2.引用必须初始化。指针建议初始化,语法上不是必须的。

3.引用初始化引用一个对象之后,不能再引用别的对象了,但指针可以指向别的对象。

4.引用可以直接访问对象,但指针需要解引用再访问。

5.sizeof中含义不同,引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32位平台下占4个字节,64位下是8byte)。

6.指针很容易出现空指针和野指针的问题,引用很少出现,引用使用起来相对更安全⼀些。

inline内联函数

inline的出现就是为了代替宏函数的,因为宏函数的书写特别容易出错。被inline修饰的函数叫做内联函数。内联函数在大多数场景中会被展开。inline对于编译器而言只是⼀个建议,也就是说,你加了inline编译器也可以选择在调用的地方不展开,不同编译器关于inline什么情况展开各不相同,因为C++标准没有规定这个。inline适用于频繁 调用的短小函数,对于递归函数,代码相对多⼀些的函数,加上inline也会被编译器忽略。

如下所示的代码:

#include <iostream>
using namespace std;

inline int add(int x = 1, int y = 2)
{
	return x + y;
}

int main()
{
	int a = 10;
	int b = 30;
	add(a, b);
	return 0;
}

 运行截图如下所示:内联函数被直接转化为指令操作了

nullptr

简单来说:C++的空指针用nullptr,C语言的空指针用NULL。

彩蛋时刻!!!

每章一句“心存希冀,目有繁星。追光而遇,沐光而行。”


网站公告

今日签到

点亮在社区的每一天
去签到