C++基础知识

本文介绍了C++中的命名空间,用于解决标识符名称冲突的问题。通过示例展示了如何创建和使用命名空间,以及usingnamespace的作用。还提到了函数重载、引用等核心概念,引用作为变量的别名,可以提高代码效率。
摘要由CSDN通过智能技术生成

C++中的hello world

using namespace std;

命名空间

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的

在stdlib中有一个rand函数,如果我们定义一个全局变量也叫rand就会报错,命名冲突

namespace swr
{
    int rand=0;
}

这个称为命名空间域,有了命名空间域,rand依旧是全局变量,属于swr的命名空间,生命周期在全局
在这里插入图片描述

int a=0;
int main()
{
	int a=1;
	printf("%d\n",a);//局部优先,就近
	printf("%d\n",::a);//指定去域作用的范围
	return 0;

编译器默认先在局部找,局部找不到去全局找,你告诉编译器去命名空间,就只去命名空间
命名空间可以嵌套,多个文件可以用一个命名空间,编译器会帮我们合成。
如果不是为了做项目,而是做测试,可以定义一个新的命名空间,然后和以前的也不会冲突。
如果每次使用命名空间的变量,函数都要指定,很麻烦,所以使用using namespace ,这样编译器会帮助我们去全局找,全局找不到就去命名空间域找
要用cout就要包含头文件iostream,cout是ostream类型的对象,<<是运算符,流插入
hello流入cout,c代表控制台,cout<<“hello”<<endl; C++自动识别类型
部分展开:using std::cout; using std::endl;
标准库都属于std这个命名空间
所以有三种方式,指定,展开,部分展开

namespace swr
{
    struct TreeNode
	{
	struct TreeNode* left;
    struct TreeNode* right;
	int val;
	};
}
int main()
{
    struct swr::TreeNode node;
    return 0;
}
 //可以嵌套
namespace sql
{
	int a = 0;
	namespace swr
	{
		int rand = 0;
		void func()
		{
			printf("func()\n");
		}

		struct TreeNode
		{
			struct TreeNode* left;
			struct TreeNode* right;
			int val;
		};
	}
}
int main()
{
		printf("%p\n", sql::swr::rand);
		sql::swr::func();
		struct sql::swr::TreeNode node;
	return 0;
}

cin是一个全局的istream类型的对象,cout是一个全局的ostream类型的对象,
>>流提取,从控制台中提取放到 i 和 d 两个变量中,cin>>i>>d
cout<<i<<d把 i和d插入到cout,把 i和d插入到cout
cout<<“hello” <<endl 插入一个const char类型的字符数组
cin cout可以自动识别类型,而printf,scanf需要显示写%d,%lf…
但是如果需要控制打印宽度,浮点数精度最好使用printf

缺省参数

当没有实参时,缺省起作用
没有给缺省参数的要从左往右传实参
给缺省参数的要从右往左传参,不能有间隔
缺省参数不可以在声明和定义的位置同时出现,以声明为准

缺省参数的应用

写一个数据结构的栈,默认按照capacity的缺省参数开空间,如果我知道要开多少空间可以显示传实参(100)提前开好空间

函数重载

一个函数, C不允许同一作用域同名函数的存在,在C++中允许在同一作用域,必须是一个命名空间,允许同名函数
形参列表必须不同,1.参数类型 2.个数 3.顺序 但返回值不同无法构成函数重载
C++的流可以自动识别类型,本质就是函数重载,cout是一个ostream类型的对象,
调用operator <<(int val)
调用operator <<(double val)

引用

引用就是给变量起别名,不会额外占用空间
1.引用必须在定义时初始化
2.一个变量可以多个引用
3.一个变量一旦引用一个实体不可以引用其他实体
引用的应用场景
// 1、做参数 – a、输出型参数 b、大对象传参,提高效率
// 2、做返回值 – 输出型返回对象,调用者可以修改返回对象,减少拷贝,提高效率
传引用返回,不能随意传临时变量的引用,结果是未定义的,系统会清理函数栈帧,此时要用传值返回
传引用返回的实例时传静态变量
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值