C++入门学习--认识C++语法

文章目录

    • @[TOC](文章目录)
  • 前言
  • 一、C++关键字
  • 二、命名空间
    • 1.namespace
  • 三、C++输入和输出
  • 四、缺省参数
  • 五、函数重载
  • 总结

前言

什么是C++?
C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。C++有很多版本,我们这里讲的是C++98
C++98
C++标准第一个版本,绝大多数编译器都支持,得到了国际标准化组织(ISO)和美国标准化协会认可,以模板方式重写C++标准库,引入了STL(标准模板库)


一、C++关键字

asm   do   if   return   try   continue
auto   double   inline   short   typedef   for
bool   dynamic_cast   int signed   typeid   public
break   else   long   sizeof   typename   throw
case   enum   mutable   static   union   wchar_t
catch   explicit   namespace   static_cast   unsigned   default
char   export   new   struct   using   friend
class   extern   operator   switch   virtual   register
const   false   private   template   void   true
const_cast   float   protected   this   volatile   while
delete   goto   reinterpret_cast

我们可以看到C++有许多的关键字,如果你学习过C语言,那么你就可以在里面看到许多熟悉的身影。C++是在C语言的基础上衍生出来的一门计算机语言,C语言有32个关键字,C++有63个关键字。

二、命名空间

1.namespace

相信很多学过C++的同学都知道这段代码

#include
using namespace std;
int main()
{
	return 0;
}

很多人在学习C++的时候,只知道要这么写,却不知道为什么要这么写,这么写有什么意义,都以为这是C++的语法要求,事实上并不是如此。

下面,让我们来重新认识一下这段代码吧!
首先,让我来介绍一下这段代码中的namespace

namespace其实是C++中的一个关键字,它的作用是用来命名空间的,被它命名的空间叫做命名空间域。它是用来解决C语言中一些缺陷的。
例如,命名冲突。

我们来看这一段代码

#include
int main()
{
	int scanf=10; //注scanf并不是C语言中的关键字,它只是C语言标准库函数里的一个函数的名字。
	scanf("%d", &scanf);
	return 0;
}
这段代码在C语言中是不能编译过去的,并且在C语言中无法解决这样的问题,而在C++中,我们可以处理这样的问题,
实际上,C++中的很多语法就是用来解决C语言中的缺陷的

要想解决这样的问题,我们就需要用到namespace(命名空间)

namespace语法格式
	namespace关键字+命名空间的名字+{}
#include
namespace n1   //我们用namespace命名了一个空间叫n1,这个整体叫做命名空间域
{
	int scanf=10;
}		
//下面我们就可以来使用这个命名空间
int main()
{
	//C++中支持C语言的语法,C++中的#include,相当于C语言中的#include
	//所以C语言中的语法在C++中都可以使用
	//为了区分C++和C语言的一些区别,C++的头文件都不带 .h
	scanf("%d", &n1::scanf); //这里用命名空间的名字+ :: 来表示这个scanf是命名空间中的scanf
	//这样我们就可以正常使用了
	return 0;
}

了解了这些,我们再来回到之前的问题
using namespace std; 是什么意思呢?

std其实是C++的标准库,和C语言的标准库一样,它里面定义了很多C++的语法内容,这句话的意思就是使用std标准库。相当于我们把std标准库里的东西都
拿出来,引入到文件中,这样我们就可以直接使用std标准库里面的东西。

关于namespace命名空间, 我们还有一些内容要补充。

1.命名空间内可以定义变量,也可以定义函数
2.命名空间可以嵌套使用
3.同一工程内可以定义相同的命名空间的名字,它们在使用的时候会被整合到一起(相同的命名空间内不可以定义相同名字的变量或函数)
#include
namespace n1
{
	int a=10;
	int b=20;
	int Add(int x, int y)
	{
		return x+y;
	}
	namespace n2
	{
		int c=30;
	}
}
using n1::b;  //在这里引入后,使用b时可以不加 n1::
using namespace n1; 
int main()
{
	printf("%d\n", n1::a);
	printf("%d\n", b);
	printf("%d\n", Add(2,3));
	printf("%d\n", n2::c);
	return 0;
}

关于命名空间的使用,有三种方法

1.加命名空间名称及作用域限定符
	n1::
2.使用using将命名空间中成员引入
	using n1::a;
3.使用using namespace 命名空间名称引入
	using namespace n1;

三、C++输入和输出

当我们学习一个新语言的时候,总要写一个代码,向世界问好。下面我们用C++来实现一下。

#include
using namespace std;
int main()
{
	cout<<"Hello World!"<<endl;
	return 0;
}
cout标准输出,使用cout必须引头文件和命名空间std
cout的规范书写方式是这样的 std::cout<<"Hello World!"<

cout的书写方式相比C语言的printf有许多方便的地方,cout可以自己识别变量的类型。当然cout也有一些不方便的地方,cout<< 每次只可以输出一个内容,不可以这样写cout<

#include
using namespace std;
struct student
{
	char name[20];
	int age;
	char sex[5];
	char tele[12];
};
int main()
{
	struct student st={"lisi", 18,"nan","12546521521";				
	cout<<"name:"<<st.name<<" "<<"age:"<<st.age<<" "<<"sex:"<<st.sex<<" "<<"tele:"<<st.tele<<endl;
	printf("name:%s age:%s sex:%s tele:%s\n", st.name,st.age,st.sex,st.tele);
	return 0;
}
cin标准输入,使用cin必须引头文件和命名空间std
cin的规范书写方式是这样的 std::cin>>a;
#include
using namespace std;
int main()
{
	int a=0;
	cin>>a;
	return 0;
}

cin的书写方式相比C语言的scanf有许多方便的地方,cin可以自己识别变量类型。

#include
using namespace std;
struct student
{
	char name[20];
	int age;
	char sex[5];
	char tele[12];
};
int main()
{
	struct student st;
	scanf("%s %d %s %s", st.name, &st.age, st.sex, st.tele);				
	cin>>st.name>>st.age>>st.sex>>st.tele;
	return 0;
}

四、缺省参数

缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。

#include
using namespace std;

int Add(int x=1,int y=2)
{
	return x+y;
}
int main()
{
	int sum=Add();
	sum=Add(2,3);
	cout<<sum<<endl;
	return 0;
}

C++入门学习--认识C++语法_第1张图片C++入门学习--认识C++语法_第2张图片

缺省参数特点:
1.必须从右往左开始。
2.必须是连续的。
3.函数的定义和声明不能同时出现缺省参数
4.缺省值必须是常量或者全局变量
5.C语言不支持。
#include
using namespace std;
void Test1(int a=10,int b=20, int =30) //全缺省
{
	cout<<"a = "<<a<<endl;
 	cout<<"b = "<<b<<endl;
 	cout<<"c = "<<c<<endl;
 }
void Test2(int a,int b, int c=20)//半缺省
{
	cout<<"a = "<<a<<endl;
 	cout<<"b = "<<b<<endl;
 	cout<<"c = "<<c<<endl;
}
void Test3(int a=10,int b, int c=20)//error 不可以这样写
{}
int main()
{
	Test1();//Test1可以不传参数;
	Test2(1,2);//Test2可以只传两个参数
	//总结:可以不给缺省参数传递参数。
	return 0;
}

五、函数重载

C语言中,函数名不可以是相同的内容,而在C++中,为了解决这个问题,给出了一个新的语法,函数重载

什么是函数重载?
函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须
	    不同,常用来处理实现功能类似数据类型不同的问题

函数重载的要求:函数参数类型不同或函数参数个数不同

#include
using namespace std;
int Add(int x, int y)
{
	return x + y;
}
double Add(double x, double y)
{
	return x + y;
}
int main()
{
	cout << Add(1, 2) << endl;
	cout << Add(1.1, 2.2) << endl;
	return 0;
}

C++入门学习--认识C++语法_第3张图片
函数重载与缺省参数

#include
using namespace std;
int Add(int x=1, int y=2)
{
	return x + y;
}
double Add(double x=1.1, double y=2.2)
{
	return x + y;
}
int main()
{
	cout << Add() << endl;
	cout << Add() << endl;
	return 0;
}
这样写构成函数重载,但是编译器会报错,因为当你不用传参数时,编译器不能识别你调用的是那个。
#include
using namespace std;
int Add(int x, int y=2)
{
	return x + y;
}
double Add(double x, double y=2.2)
{
	return x + y;
}
int main()
{
	cout << Add(1) << endl;
	cout << Add(1.1) << endl;
	return 0;
}
可以这样写

注:函数重载说的只是函数参数类型函数参数个数,不包括函数返回值类型


总结

以上就是本篇博客的全部内容,希望对大家理解C++有帮助。

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