C++入门(浅谈类和对象)

2023-12-15 05:13:13

1 命名空间

1-1命名空间的定义

定义命名空间的目的是为了不与标识符的名称进行冲突,命名空间中可以定义函数,变量,类型。

比如:这里的rand和strlens其实是函数,在命名空间中可以避免与全局作用域中的rand函数和strlens函数冲突,其次命名空间还可以嵌套定义

同时一个命名空间定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
namespace bit
{
	int rand = 10;
	int strlens = 20;
	int Add(int a, int b)
	{
		return a + b;
	}
	class bit
	{
		int Sub(int a = 4, int b = 5)
		{
			return b - a;
		};
		double _money;
		float  _lucky;
		int _life;
	namespace character
	{
		char* next;
		int people;
	}
}

1-2命名空间的使用

方法1:加命名空间名称+作用域限定符

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
namespace bit
{
	int rand = 10;
	int strlens = 20;
	int Add(int a, int b)
	{
		return a + b;
	}
	class bit
	{
		int Sub(int a = 4, int b = 5)
		{
			return b - a;
		};
		double _money;
		float  _lucky;
		int _life;
	}*p;
	namespace character
	{
		char* next;
		int people=10;
	}
}
int main()
{
	cout << bit::character::people<< endl;
	return 0;
}

方法2:使用using将命名空间某个成员引入

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
namespace bit
{
	int rand = 10;
	int strlens = 20;
	int Add(int a, int b)
	{
		return a + b;
	}
	class bit
	{
		int Sub(int a = 4, int b = 5)
		{
			return b - a;
		};
		double _money;
		float  _lucky;
		int _life;
	}*p;
	namespace character
	{
		char* next;
		int people=10;
	}
}
using bit::Add;
int main()
{
	cout << Add(4,5)<< endl;
	return 0;
}

方法3:用using namespace将某个命名空间引入

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
namespace bit
{
	int rand = 10;
	int strlens = 20;
	int Add(int a, int b)
	{
		return a + b;
	}
	class bit
	{
		int Sub(int a = 4, int b = 5)
		{
			return b - a;
		};
		double _money;
		float  _lucky;
		int _life;
	}*p;
	namespace character
	{
		char* next;
		int people=10;
	}
}
using namespace bit;
using namespace character;
int main()
{
	cout <<people << endl;
	return 0;
}

2 C++输入和输出

C++的输入输出会自动识别类型,非常方便不像C那样需要printf指定类型输出,其次C++也是需要包含头文件的,输入流cout,输出流cin所需的头文件就是#include<iostream>,<<是流插入运算符,>>是流提取运算符,std是C++标准库的命名空间名,C++将标准库的定义和实现都放在这个命名空间里

3 缺省参数

调用的函数可以存在没有参数,或者参数缺省,下面来给大家示例

void fun(int a = 10)
{
	cout << a << endl;
}
int main()
{
	fun(2);
	fun();
	return 0;
}

存在多个参数时,不能隔着缺省,只能从右向左连续缺省

int fun(int a = 10,int b=6,int c = 8)
{
	return a + b + c;
}
int main()
{
	cout << fun(2, 4) << endl;
	cout << fun(4, 4, 4) << endl;
	cout << fun(5) << endl;
	fun(5);
	return 0;
}

4 函数重载

也就是说我可以用相同的函数名,但是参数类型不一样,编译器会自动识别函数参数类型进行相应的匹配

int fun(int a = 10,int b=6,int c = 8)
{
	return a + b + c;
}
void fun(char* p, char a, int b)
{
	cout << p << endl;
	cout << a << endl;
	cout << b << endl;
}
int main()
{
	char arr[15] = "I love China!";
	cout << fun(2, 4) << endl;
	fun(arr, 65, 4);
	return 0;
}

5 引用

引用也相当于取别名,比如你的名字一样有小名,有大名。

引用的变量其实就是这个变量本身,在语法上其实引用是别名和本名公用同一块空间的,

但是底层逻辑就不是了,底层逻辑就是指针。

int main()
{
	int a = 10;
	int& b = a;
	b = 100;
	cout << a << endl;
	
	return 0;
}

6?内联函数

内联函数其实是一种空间换时间的方式,内联函数会在调用它的地方展开,不会开辟函数栈帧,提高了程序的运行效率,但是如果你的内联函数的空间很大很大,那么编译器会自动把它的内联取消定义。

关键字修饰:inline

可以看到下面的汇编代码中根本没有为fun函数开辟栈帧只是调用而已

文章来源:https://blog.csdn.net/2301_79811170/article/details/135001954
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。