您的位置:首页 > 编程语言 > C语言/C++

c++程序设计第一章 开始接触c++

2016-04-09 23:50 309 查看
一:输入输出

cin,cout 是输入输出流对象 << >> 是插入运算符和插入运算符 就需要iostream头文件(input output stream简写)

using namespace std; 意思是命名空间 std。 c++标准库中的类和函数在std中声明

对于>>是从键盘输入到cin然后再到内存的

输入输出的时候可以

cout<<"字符串"<<endl;

cout<<'x'<<endl; 单个字符输出

二:区分const 和 define 定义常量 的优势和缺点

const 定义的有数据类型,占用存储单元,有地址,具有变量的性质

define 定义的常量只是在预编译时进行字符的替换,预编译之后就没有这个符号了,没有类型,没有内存,容易出错

三:函数原型的声明

C语言:要是是整形的函数可以不用声明

c++强制性要声明

四:函数模板和参数

template<typename T> 尖括号里面可以多个参数(typename T),也可以是template<class T>

例:

#include<iostream>
using namespace std;

template<typename T,typename P>
P deal(T x,T y,P z)
{
return x+y+z;
}

template<typename T,typename P>//<span style="color:#ff6666;">每次写一个函数都需要重新定义模板</span>
T work(T x,T y,P z)
{
return x+y+z;
}

int main()
{
int i=125,j=34;//<span style="color:#ff0000;">数字大一点的时候结果不会是预测的那样</span>
float k=23.234;

cout<<deal(i,j,k)<<endl;
cout<<work(i,j,k)<<endl;

return 0;
}


带默认参数的函数,若有默认值的参数数目小于参数的数量就需要把参数放在形参列表的最右端
一个函数不能同时作为重载函数和有默认参数的函数:因为调用函数的时候,如果少写一个参数,提供无法判断是重载还是默认参数函数

例如:

当int max(int a, int b ,int c=123) 是重载函数的时候

调用max(a,b),系统就无法识别是哪一种函数

五:变量的引用

例如: int a; int &b=a; &这个不是取地址符号,而是引用声明符号,引用不需要开辟新的内存,两个变量名字代表的是同一个地址同一个变量

易 错 点:(理解)

int a1,a2;
int &b=a1;
int &b=a2;//不能同时作为另外一个的引用


int &b;//没有指定代表哪一个变量


float a;
int &b=a;//类型不同


int a=5,b=9;
int &c=a;
c=&b;       //不能让再次c变成b的引用


void &a=9;//<span style="color:#ff0000;">没有空类型引用</span>


char a[56]="helllo";
char &p=c;    //<span style="color:#ff0000;">不能作为数组的引用</span>


引用相当于指针,但是指针使用 * 或者 - > 比较麻烦,所以使用引用比较好,例如

#include<iostream>
using namespace std;

void swap(int &x,int &y)
{
int temp;
temp=x;
x=y;
y=temp;
}

int main()
{
int i=3,j=4;
swap(i,j);
cout<<"i= "<<i<<"  j="<<j<<endl;

return 0;
}




理解最后几行里面的临时变量,他们因为const 就可以转换类型

六:内置函数,作用域运算符

内置函数就是把调用的函数代码嵌入到主调函数中

内置函数就是多了一个inline,例如: inline int max (int a, int b ,int c)

内置函数适用条件:规模小使用频繁,才可以使之高效

作用域运算符 ::

先了解一个规定:在main函数中局部变量将屏蔽全局变量(他们名字相同)

就在main函数中 这样使用 ::a,这样就屏蔽了局部变量了a,使用的是全局变量的a的值(只是当时适用局部变量才会有这个效果的)

七:字符串变量

string 类型的数据

定义字符变量

string st1r=“ni shi SB”;但是char类型的就不能这样赋值了,需要大括号

string str2=“ yes”;

string temp = str1+str2;(这样str2就接在str1后面了)

对于这种类型的数据同样可以使用 cin cout

并且 str1=str2; 表示把str2赋值给str1,str1原来的就没有了,变成了str2里面的数据了

并且可以像数组一样处理其中的每一个元素 例如 str1[ 2 ] ; 这样就调用了第三个元素了,可以替换

还可以使用 大于小于等于号比较字符串,从第一个字符比较,完全相同就是相等,大小关系看acsii码,从第一个开始一个个比,具体自己试验,搜索

字符串比较大小

#include <iostream.h>

#include <string.h>

void main(void)

{

  char buf1[] = "aaa";

  char buf2[] = "bbb";

  char buf3[] = "ccc";

  int ptr;

  ptr = strcmp(buf2,buf1);

  if(ptr > 0)

   cout <<"Buffer 2 is greater than buffer 1"<<endl;

  else

   cout <<"Buffer 2 is less than buffer 1"<<endl;

  ptr = strcmp(buf2,buf3);

  if(ptr > 0)

   cout <<"Buffer 2 is greater than buffer 3"<<endl;

  else

   cout <<"Buffer 2 is less than buffer 3"<<endl;

}


字符串常量以换行符 “ \ 0 ” 结束,当字符串常量放到字符串变量时候不会把 换行符放进去

字符串数组(string str【5】就是表示第二维为5的字符串数组)也是,数组每一个字符串后面不会包括换行符

八:动态分配内存撤销内存

例如

#include<iostream>
#include<cstring>
using namespace std;

struct student
{
int num;
char name[8];
};

int main()
{
student  *p;
p=new student;
p->num=132;
strcpy(p->name,"hello");
cout<<p->num <<endl<< p->name<<endl;//<span style="color:#ff0000;">这里使用了两个endl也是可以的</span>
delete p;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: