C++是由C语言演变出来的,那么C++有什么特别的呢?
这篇文章主要写C++相比较C语言的特别之处。
cin>>m>>n;
cout<
2.格式化基本简单实验代码
#include#includeusing namespace std;
int main()
{bool m;
double x,y,z,f;
float f1;
int a,b,c;
cin>>boolalpha>>m; //输入:true
cout<>oct>>a>>hex>>b>>dec>>c; //输入:23 D2 -9
cout<>x>>y>>f>>f1; //输入:3.14 0.1e1 3.1415926 0.1
cout.precision(5); //按浮点数形式输出
cout<
查看详细简洁全面格式化请移步
link(C++ 数据格式化)
(1)在声明或者定义函数的时,为形参指定默认值,叫做默认参数;
(2) 分类:半缺省参数(形参不全部指定默认值)、全缺省参数(形参全部指定默认值)
(3)在半缺省参数情况下,默认参数放在参数列表的最后面;
上代码
#includeusing namespace std;
int func(int x=2,int y=3)
{return x+y;
}
int main()
{int a=3,b=9;
int k;
k=func(a); //输出为3+3=6
//k=func(a,b) 输出为 3+9=12
//k=func() 输出为2+3=5
cout<
(4)缺省参数不能再函数声明和函数定义中同时出现,必须二选一;
(5)默认参数必须是常量、全局变量、函数调用,不能是局部变量;
(1)定义:在同一个域中用同一个函数名来定义不同的函数,要求函数参数的类型、数量、返回值类型不同;
(2)优点:在编程中会遇到几个函数的功能差不多,但是参数不同,例如add,将不同类型的参数进行add,如果是C语言可能要对函数命名add1,add2,add3,令人看的头大。
更加注意不要将功能不一样的函数声明成重载函数,以免误解和混淆。
上代码
int add(int a,int b);
double add(double a,double b);
double add(int a, int b,double c);
3.函数模板1.定义:独立于类型的函数,可做为一种模式,产生函数的特定类型版本;根据数据类型,自动实例化。
2.实质:同一个函数体,可以给不同类型数据使用;相当于函数重载的数量相同,类型不同的进步。
3.函数模板定义语法形式是:
template<模板形参表>返回类型 函数名 (形参列表)
{
函数体
}
上代码
#includeusing namespace std;
templateT abs(T a) //用T表示数据类型,也可用其他表示
{return a>0?a:-a;
}
int main()
{int a=-3;
double b=2.3;
cout<
4.模板形参表
(1)定义:用尖括号< >括起来,来表示一个或者多个模板形参的列表;
(2)表示< >之间不允许为空,多个形参之间用 ,逗号隔开;
(3)两种形式:
template< typename 类型参数名1 ,typename 类型参数名2>
template< class 类型参数名1,class 类型参数名 2 >
一般用第一种typename,第二种class与面向对象 类重复,容易混淆
三、寄存器变量可以储存在CPU寄存器中的局部变量
register 数据类型 变量名称
register int a
特点是运行速度快,但是寄存器的空间是有限的,考量一下要不要用,别等需要的时候,没有空间了
四、内部函数和外部函数 1.内部函数static 返回值类型 函数名 (形参)
{
函数体
}
适用于多个文件的程序,内部函数的意义是只能本文件使用,在连接检查的时候不会出现函数名不唯一的情况,多个人编写同一个程序时常用的策略。
2.外部函数extern 返回值类型 函数名(形参)
{
函数体
}
在程序中基本都是外部函数,extern可以省略
五、数组 1.数组的长度数组的长度是一个常量,不能用变量,长度不能改变
2.多维数组多维数组初始化的时候,第一个长度可以省略,但是后面的不能省略,因为编译器可以根据数组的元素个数自动判断出来第一个长度
3.数组的引用int a[ ][2][3] ={1,2,3,4,5,6,7,8,9,10,11,12} //正确
int a[2][ ][3]={1,2,3,4,5,6,7,8,9,10,11,12} //错误
int a[2][2][3]={1,2,3,4,5,6,7,8,9,10,11,12} //正确
不能对整个数组进行引用,赋值
可以对单个数组元素变量进行引用、赋值
(1)数组为函数形参的时候
double max(double a[10] ) //即数组类型、数组名字、数组长度,长度可以省略
一维数组的时候,形参数组长度可以写,可以不写,可以与实参的数组长度相同或者不同;
多维数组的时候,第一维任意,但是其他维要与实参相同;
(2)实参传递数组名,数组的首地址传递到函数
(3)数组的形参实际上接收不到数组的长度,所以可以再设置一个形参来传递数组的长度
#includeusing namespace std;
int fcout(int a[],int n) //数组的长度n
{int i=0;
for(;icout<int a[5]={1,2,3,4,5};
fcout(a,5);
return 0;
}
六、字符串
1.以字符数组储存(1)定义形式
char a[4]={‘a’,‘b’,‘c’,‘d’}
(2) 以’\0’结尾,\0是字符串结束的标志,遇到这个字符结束,
字符串实际存放在字符数组中,字符数组长度+1,来存储这个\0;
(3)字符串常量用“ ”表示,编译器自动再字符串最后加上\0空字符
(1)标准输入输出流
char str[80];
cin>>str;
cout<
(2)字符串输入输出函数
char *gets (char *s);
gets函数原型即输入字符串到s中去,s是字符数组或是指向字符数组的指针,长度足够大,可以容纳很大的字符串
char str[80];
gets(str); //输入字符串
char *puts(char *s);
puts函数输出s字符串,遇到空字符结束,最后输出一个‘\n’换行字符;
不输出字符串的最后的空字符.
char str[80]="指针不指南吗";
gets(str); //输出字符串
3.string.hchar str1[10] , str 2=“computer”;
strcpy(str1,str 2) ; //复制str2到str1,包括最后的\0
char str1[10] , str 2=“computer”;
strncpy(str1,str 2,4) ; //复制str2前4个字符到str1,补\0
char str1=“ABC” , str 2=“123”;
strcpy(str1,str 2) ; //把str2连接到str1后面,包括\0,str 2没有变化
char str1=“ABC” , str 2=“123456”;
strcpy(str1,str 2,4) ; //把str2前4个字符连接到str1后面
if(strcmp(str1,str2)==0)… //比较字符串相等
if(strcmp(str1,str2)>0)… //比较str1大于str2
n=strlen(“computer”) //n=8,不包含\0
char string[20]=“love computer”;
n=strlen(string); //n=13
4.string 对象f=atof(“123.45”); //f=123.45,把字符串转化成一个float数据
i=atoi(“-456”); //i=-456,把字符串转化成一个int数据
(0)需要包含头文件
#include //不能写成string .h
(1)字符串对象的定义和初始化
和变量相似,如果string没有初始化则一律为空字符串,注意string不需要NULL结尾
char str[20]; //C风格定义
string str1; //定义string对象
string sx,sy,sz; //定义多个string对象
char str[20]=“computer”; //C风格初始化
string str1=“computer”; //string对象复制初始化
string str1(“computer”); //string对象直接初始化
(2)string对象的引用
与变量相似,直接引用string对象名即可
str1=“computer” ; //直接使用string
(3)string对象的输入输出
cin>>str1; //输入字符串到string对象中存放
cout<gets(str1); //c风格字符串输入输出
puts(str1);
(4)字符串的运算
string st1=“AB”,str2=“12”;
str=str1+str2;//str=“AB12”;
str1+=str2; //str=“AB12”;
str1=str1+“aph”; //str1=“ABaph”;
str1=“AB”,str2=“12”;
str1>str2;结果为假;
str1== str2;//jia;
str1=="ABC“
(5)其他对它的成员函数进行操作
程序中顺序都是从0开始的
形式如下
str1="ABCDEF";
n=str1.size();//n=7;
n=str1.length();//n=7;
b=str1.empty();//b为假,判断字符串是不是空字符串bool
//得到子字符串
str2=str1.substr(2,4);//从第2个字符开始的4个字符;str2="CDE";
//查找字符串
n=str1.find("DEF",pos); //从pos开始查找字符串"DEF"在字符串str1中的位置,返回开始的位置,n=3;
//删除字符
str1.erase(1,2); //从第1个字符开始的后2个字符删掉,str1="ABEF";
//增加字符
str1.append("123456",1,3);//
//字符串的替换和插入
str1.replace(p0,n0,S1,n); //删除str1从p0开始的n0个字符,在p0处插入字符串S1的前n个字符;
str1.replace(p0,n0,str2,pos,n); //删除str1从p0开始的n0个字符,在p0处插入字符串str2从pos开始的前n个字符;
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧