【C++简单入门学习笔记】一.初识C++(一)

系列前言
本系列博文仅为博主个人学习笔记,通过博客理清学习思路用于复习。如有记述不周到的地方请谅解;如能指出,更加感谢。


文章目录

  • C++准备
      • 创建C++文件
      • C++基本兼容C的语法
      • 第一个C++程序
  • 命名空间
      • 作用
      • 用例
      • 注意事项
          • 命名空间中使用重名库函数
          • 命名空间的嵌套
          • 同名命名空间的自动合并
      • 命名空间的使用
          • 指定访问
          • 展开访问
          • 指定某个变量展开后访问
  • I/O流
      • 输出cout
          • 示例一
          • 示例二
      • 输入cin
  • 缺省参数
      • 全缺省参数
      • 半缺省半数
  • 函数重载
  • 引用(1)
      • 什么是引用
      • 引用的特性
      • 常引用


C++准备


创建C++文件

解决方案语言选择C++,源文件后缀选择.cpp
c p p = c plus plus = c + +


C++基本兼容C的语法

#include
int main()
{
     
	printf("Hello World\n");
	return 0;
}

上面的程序在C++的编译器里是完全可以执行的


第一个C++程序

#include
using namespace std;
int main()
{
     
	cout << "hello world" << endl;
	return 0;
}

结果与前一个程序一样
为了看懂这个程序引入命名空间和I/O流的概念


命名空间


作用

解决命名冲突的问题

 int printf = 0;

c语言无法定义以C库函数或关键字为名字的变量
C++提供了一种解决办法——命名空间


用例

#include
#include
namespace ytx
{
     
	int scanf = 0;
	int printf = 0;
}
namespace hxy
{
     
	int scanf = 1;
	int printf = 1;
	void f()
	{
     
		::printf("hello world\n");
	}
}
int main()
{
     
	printf("%d\n", ytx::scanf);
	printf("%d\n", ytx::printf);
	printf("%d\n", hxy::scanf);
	printf("%d\n", hxy::printf);
	hxy::f();
	return 0;
}

语句模板

namespace 空间名
{
定义变量;
定义函数;
}
int main()
{
空间名::空间中定义的变量名 //引用变量
空间名::函数名(形式参数类型 形式参数名) //引用函数
}


注意事项


命名空间中使用重名库函数

::库函数名(::前没有东西就表示是整体空间)


命名空间的嵌套
#include
#include
namespace ytx
{
     
	int scanf = 0;
	int printf = 0;
	namespace hxy
	{
     
		int scanf = 1;
		int printf = 1;
		void f()
		{
     
			::printf("hello world\n");
		}
	}
}

int main()
{
     
	printf("%d\n", ytx::scanf);
	printf("%d\n", ytx::printf);
	ytx::hxy::f();
	return 0;
}

访问语句

母空间名::子空间名::函数名/变量名


同名命名空间的自动合并

在程序中不同位置定义的同名命名空间的内容会进行合并


命名空间的使用

命名空间的使用有三种方式


指定访问

空间名::函数名/变量名

展开访问

using namespace 空间名;
后面调用函数和变量不在需要指定访问

缺点是失去了区分功能,命名空间暴露出来了

指定某个变量展开后访问

using 空间名::变量名/函数名
后面调用这个变量或函数的时候不需要指定访问


I/O流


输出cout


示例一
#include
using namespace std;

int main()
{
     
	cout << "Hello world!!!" << endl;
	return 0;
}

上面是我们一开始写的第一个C++程序
下面逐句分析

#include

引出I/O流头文件

using namespace std;

展开std空间,std是C++库的namespace,C++中的所有东西都是放到std命名空间中的东西
后面使用的cout、endl是属于std标准库中的,所以先展开std命名空间

cout << "Hello world!!!" << endl;

cout是输出的意思,表示输出流的对象,<<表示后面的语句“流向”它,endl表示换行。这句话的作用类似于printf(“Hello world!!!\n”);但是优点很明显,那就是cout语句不需要写出数据类型,系统会自动识别


示例二
	int a = 1;
	double b = 1.11;
	cout << a << "," << b << endl;
	return 0;

输入cin


cin>>a>>b;

功能近似于

scanf("%d%d",&a,&b);

区别是cin也可以自动识别数据类型


缺省参数


初始化函数中的形式参数,如果调用函数实际参数已经给了值,那么就用不到缺省参数,如果并没有给值,缺省参数的值就是函数中形参的初始值
形象的来看,缺省参数就是一个“备胎”

#include
using namespace std;
void f(int a = 0)
{
     
	cout << a * a << endl;
}
int main()
{
     
	f(2);
	f();
	return 0;
}

在这里插入图片描述


全缺省参数

形式参数全部被初始化
【C++简单入门学习笔记】一.初识C++(一)_第1张图片
传参必须是从左往右传


半缺省半数

形式参数部分被初始化
半缺省必须是连续的从右往左缺省
传参必须是从左往右传

#include
using namespace std;
void f(int a ,int b = 2, int c = 3 )
{
     
	cout << a * a << " " << b * b << " " << c * c << endl;
}
int main()
{
     
	f(2);
	f(2, 4);
	f(2, 4, 6);
	return 0;
}

函数重载

C语言中不允许函数名相同,但是C++可以
同一个函数名被多次使用就是函数重载
特点就是函数名相同,参数(类型 or 个数 or 顺序)不同
eg:
类型不同

int Add(int a, int b)
{
     
	return a + b;
}
double Add(double a, double b)
{
     
	return a + b;
}
long Add(long a, long b)
{
     
	return a + b;
}

个数不同

int Add(int a, int b)
{
     
	return a + b;
}
int Add(int a)
{
     
	return a;
}

顺序不同

void Func1(int i, char ch)
{
     }
void Func1(char ch, int i)
{
     }

返回值如何与是否构成重载无关
调用时,重载函数会根据实际参数自动识别


引用(1)


什么是引用

给同一个变量取新的名字
这些名称都指向的同一块空间
对任意一个名称操作都可以操作这块共用的空间
给出语法:

变量数据类型& 新变量名 = 旧变量名;

【C++简单入门学习笔记】一.初识C++(一)_第2张图片


引用的特性

  • 引用变量必须在定义的时候进行初始化
  • 一个变量可以多次引用
  • 一个引用如果引用了一个变量就跟定这个变量了,不能再被用来引用其他变量

常引用

引用取别名时,变量访问的权限可以缩小不能放大

#include
using namespace std;
int main()
{
     
	int a = 1;
	int& ra = a;
	const int& e = ra;
	cout << e << endl;
	return 0;
} 

ra的权限是可读可写的,e的权限是只读的,由于权限是缩小了没有放大,所以这样是可以的

#include
using namespace std;
int main()
{
     
	int i = 1;
	double db = i;
	const double& rd = db;
	const float& rs = rd;
	return 0;
} 
double db = i;

这句是隐式类型转换,double是临时变量,临时变量具有常性,也就是只读不可写
所以用const double引用并没有放大权限

你可能感兴趣的:(c++)