[HQS]C++相关语法

[HQS]C++相关语法

一、C++新特性

1、C语言不适合作为大型程序开发的编程语言;

2、相比于C的新特性

(1)命名空间
(2)函数重载与运算符重载
(3)引用
(4)面向对象特性
(5)泛型编程(模板编程)
(6)STL标准库
(7)异常处理;

3、命名空间

什么是命名空间:对于两个相同变量名的变量,画个圈,圈里的变量和圈外的变量互不干扰;
怎么使用,‘::’;
全局使用:using namespace ;
(1)意义:为了解决合作开发时的命名冲突问题;
#include<stdio.h"
namespace  data{
	int a=10;
}
int a=20;
//::为域作用符,
int a=20;
int main()
{
	int a=30;
	printf("%d\n",a);//打印a=30
	printf("%d\n",::a);//打印全局变量
	printf("%d\n",data::a);//打印data中的a
}
(2)语法:
①定义
namespace <name>{
//variable,class,function
}
②部分使用:::<variable/function/class>
age 只能在本文件中使用
namespace
{
	int age=11;
}
③全部使用: using namespace ;
在函数内使用时,表示命名空间的数据只在本函数内生效。
#include<iostream>
#include<stdio.h>
#include<cstdio>

namespace liu{
	int age=24;
}
int main(int argc,const char *argv[])
{
	std::cout<<"hello world"<<std::endl;
	using namespace liu;
	std::cout<<age<<std::endl;
}

④匿名命名空间,只在本文件中使用,可以不用定义命名空间名称;
#include<iostream>
#include<stdio.h>
#include<cstdio>
namespace{
int age=20;
}

int main(int argc,const char *argv[])
{
	std::cout<<age<<std::endl;
	return 0;
}
④取别名
#include<iostream>
#include<stdio.h>
#include<cstdio>
namespace name1{
int age=20;
}
namespace naem2=name1;
int main(int argc,const char *argv[])
{
	std::cout<<name2::age<<std::endl;

}

4、c++输入与输出

(1)cin 输入流(解决scanf()缓冲区问题,对输入类型可以进行判断),输入成功返回1,输入错误返回0;
1)cin.fail();//输入失败返回true,并把输入字符放回输入流,等待下次读取;
2)cin.clear();//输入失败后,清除掉错误
3)cin.ignore();//函数原型 istream &ignore(int n=1, int delim =EOF);此函数作用是跳过输入流中的n个字符,或者跳过delim 前面的所有字符,当为给函数传参数,等价于跳过一个字符;
(2)cout 输出流
#include<iostream>
using namespace std;
int main(int argc, const char *argv[])
{
	int a=11;
	cout<<"|";
	cout.width(4);
	cout<<a<<"|"<<endl;
	///
	//将数字以16进制输出:
	cout<<hex<<a<<endl;

	/
	//将数字以8进制输出
	cout<<oct<<a<<endl;

	//
	//showbase 显示前缀
	cout<<showbase<<a<<endl;
	return 0;
}

在这里插入图片描述

(3)标准错误流 cerr,以上均为对象,是类中早已定义好的,使用时需要包含头文件;
(4)猜数字:在这里插入图片描述
//猜数字

5、C++函数

(1)带默认值的函数
①定义:定义函数时可以给形参指定一个默认值,如此做,在调用时未给该形参赋值,那么就使用该默认值;
②规则:
1)默认参数只能放在形参列表的最后;
2)一旦某个形参指定了默认值,那么它后面的所有形参都必须有默认值;
3)实参和形参的传值是从左到右依次匹配的,默认参数的连续性是保证正确传参的前提;
4)声明与实现只需要在其中一处进行默认参数说明,不需要两处都进行说明;
(2)带占位参数的函数
1)定义:C++中函数的形参列表可以有占位参数,用来作占位,调用函数时必须填补该位置。
2)规则:
①只写类型不写变量名;
②若无默认值参数,则调用时必须填补;
③若有默认值参数,则调用时可以不用填补;
(3)函数的重载
1)定义:在同一作用域内,参数列别不同,函数名相同的函数,虽然函数名相同,但函数所在内存位置不同,本质上还是不同函数;
2)规则:
①函数名必须相同;
②参数列表必须不同(个数不同,类型不同,参数列顺序不同等);
③函数的返回类型可以相同也可以不相同;
④仅仅返回类型不同不足以成为函数的重载;
⑤关于const ------- 需要根据具体形参含义进行确定;
3)原理:在编译阶段函数会被重新命名,根据函数名、参数列表来决定,比如void Swap(int &a, int &b)在编译阶段的名称为_Swap_int_int;

6、C++引用

(1)定义:引用变量是一个别名,已存变量另外一个名字,同一块内存地址。
(2)与指针的区别:①不存在空引用,引用必须连接到一块合法的内存;②一旦引用被初始化为一个对象,就不能被指向到另外一个对象,指针可以在任何时候指向到另一个对象;③引用必须在创建时被初始化,指针可以在任何时间被初始化。
(3)规则:①<类型> &<引用名>=<目标名>;②引用必须在创建时被初始化,且初始化后不可以再指向其他目标名;③引用类型必须与目标类型一致;④不能将已有的引用名作为其他变量或对象的名字或者别名 ;
(4)原理:使用引用时编译器会再底层生成一个指针,并进行指针操作,本质是 int *const p;
#include<iostream>
using namespace std;
int main()
{
	int a=10;
	int &b=a;//不存在空引用,引用就立即被初始化为一个对象,不可再指向另外一个对象,
	cout <<"a=" <<a <<"b="<<b<<endl;
	
}

//int const *p;可以p= ,不能*p=;
//int *const p;//*p可以改,p不能改;

//交换两个数
a=a^b;
b=a^b;
a=a^b;
(5)用法:
1)函数传参
void Swap(int &a,int &b)
{
	int temp=a;
	a=b;
	b=tmp;
}
2)函数返回值:返回的数据不可为局部变量;可以做左值,也可以做右值;
3)对数组的引用
int arr[5]={1,2,3,4,5};
int (&refArr)[5]=arr;
refArr[0]=6;
cout<<"Arr[0]="<<arr[0]<<endl;
4)对指针引用
int num=100;
int *ptr=&num;
int *&refptr=ptr;

*refptr=200;
cout<<*ptr="<<*ptr<<endl;

7、C++ new与delete

(1)概念:①new,申请一块内存,并且初始化对象(底层使用malloc在堆区);②delete,释放一块内存,并且销毁对象;
(2)new用法
//申请一个对象
int *a=new int(0);//int 为数据类型,0 为初值
cout<<"a="<<*a<<endl;

//申请一个对象数组
int *arr=new int[5]();
cout<<"arr[0]="<<arr[0]<<endl;

(3)delete用法
//销毁一个对象
int *a=new int(0);
cout << "a="<<*a<<endl;

delete a;
return 0;
//销毁一个对象数组
int *arr =new int[5]();
cout << "arr[0]="<<arr[0]<<endl;
delete []arr;

(4)与malloc/free的区别
1)new/delete 的实现时基于malloc/free;
2)malloc/free 是C/C++标准库函数,new/delete是C++ 操作符;
3)malloc /free 需要手动计算类型大小,且返回 void * ,new/.delete 可以自己计算类型大小,根据类型返回相应的类型的指针;
4)malloc /free 只负责分配/释放空间,new/delete 会调用构造函数与析构函数,用于初始化对象与销毁对象;
5)它们都是动态管理内存的入口,堆是一块具体区域内存,而自由存量区是一个抽象概念;
//-std=c++11

8、C++bool类型

bool类型只有两个取值,ture和false,true 表示真,false 表示假;
C++中使用cout输出bool变量的值时还是用数字1和0表示,而不是true 或false;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jun8086

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值