我的第一本C++笔记(1)——初识C++

1 篇文章 0 订阅
1 篇文章 0 订阅

这个笔记是基于C++面向对象程序设计写的。这是我读的第一本C++参考书,简单易懂。

几个简单的C++程序

例1 输出”Hello World”

#include <iostream>
int main(){
    using namespace std;  //命名空间
    cout<<"Hello World!";  //程序输出
    return 0;
}

程序运行时输出:

Hello World!
  • cout用于标准输出,与<<搭配使用,会自动辨别数据类型,使用cout(后面还会学到的cin也是)要使用到iostream头文件。C++系统提供的头文件不带.h后缀,但C++也可使用C的带.h后缀的头文件。

  • “using namespace std”的意思是“使用命名空间std”。


求和

#include <iostream>
int main(){
    using namespace std;
    int a,b,sum;
    cin>>s>>b;  //用户输入
    sum=a+b;
    cout<<"a + b = "<<sum<<endl;
    return 0;
}

如用户输入

1 2

则程序输出

a + b = 3
  • cin与cout类似,是C++系统定义的输入流对象,与>>搭配使用,会自动辨别数据类型。

  • endl是C++输出时的控制符,作用是换行(endl是endline的缩写,与 \n作用相同)。


比较大小

#include <iostream>
int main(){
    using namespace std;
    int max(int,int);  //使用函数前先声明原型
    int a,b;
    cin>>a>>b;
    cout<<"max = "<<max(a,b);
    return 0;
}

int max(int a,int b){
    int tmp;
    tmp=a>=b?a:b;
    return tmp;
}

如用户输入

20 10

则程序输出

max = 20
  • 程序第4行是对max函数的声明。C++中当函数的定义在函数的调用之后时,强制要求声明,否则会报错。声明时,参数可以只写类型,就像上面一样。

几个细节问题

cout与cin
cout是标准输出流,cin是标准输入流(即通过键盘和显示屏输入输出)
cout和<<搭配使用

cout<<"张三"<<"  18岁"<<endl;  //endl表换行
cout<<setw(6)<<userId<<endl;  //setw()设置显示宽度
cout<<hex<<20<<dec<<20<<oct<<20;//hex十六进制,dec十进制,oct八进制
  • cout输出时并未指定数据类型(如C中的%d,%f,%c等),cout<<会自动判定数据类型。

  • 控制符setw()指定输出所占的列数(必须包含头文件iomanip.h).

  • cin也会自动识别数据类型

  • C++为输入输出流提供了格式控制,如dec(十进制),hex(十六进制),oct(八进制)。


const定义常量

const float PI=3.1415926;
  • const可以避免C语言中的#define定义符号常量的缺点。

函数重载
函数的参数个数或类型不同,但函数名相同

int max(int,int);
float max(float,float);
  • 函数名相同,但函数的参数个数或类型不同的几个函数

  • 注意:仅仅只有函数的返回类型不同不是重载,因为C++无法在调用时通过返回类型区分不同的函数。


函数模板

template <typename T>
T max(T a,T b){
    return a>=b?a:b;
}
  • template 的含义是模板,尖括号中的typename是关键字(用class也可,但class也是类的关键字,易用混,建议用typename),T是随意指定的一个代表某一数据类型的符号。

有默认参数的函数
可在函数原型声明时给出默认值

float area(float r=3.2);  //有默认值的参数在参数列表中的最后
  • 若函数定义在函数调用之前,默认值在函数定义时给出,否则,默认值在函数声明时给出。

  • 一个函数不能既是重载又有默认值。

  • 指定默认值的参数必须放在形参列表的最右端。


变量的引用

int a;
int &b=a;  //b是a的引用,相当于别名,二者同步

将引用作为参数

void swap(int &a,int &b){
    //...
}

swap(x,y);//调用时只要直接传入变量就可以了
  • 引用又称别名,对变量声明一个引用并不另开辟内存单元,与原变量共享同一内存单元。在声明引用时必须同时初始化。

  • 当&a的前面有类型符时(如int &a),它必然是对引用的声明,否则&就是地址运算符。

  • 不能建立void类型的引用,不能建立引用的数组。


内置函数
会在编译时自动将所调用的函数代码嵌入到主函数中,提高效率

inline int max(int a,int b){  //只需要加上关键字inline即可
    //...
}
  • 只要在函数定义时加上inline就可以了。

作用域运算符
::a表示全局作用域中的a

//...
int a=10;
int main(){
    int a=20;
    cout<<a<<endl;  //20
    cout<<::a<<endl;  //10
    return 0;
} 

字符串变量
使用前必须先加载string头文件

#include <string>
int main(){
    string str1="Hello ";
    string str2 +="World!";
    cout<<str2<<endl;
    return 0;
}
  • 将字符串常量存入字符串变量中时,只存放字符串本身而不包括“\0”。

  • 字符串赋值 string1=string2=”zhangsan”;

  • 字符串连接 string1=string1+string2;

  • 字符串比较,直接用==,>,< ,!=, <=, <=。

  • 字符串数组string name[5]; string name[3]={“zhangsan”,”lisi”,”wangwu”};


使用new和delete动态分配和撤销内存

new int;                    
new int(100);
new char[20];
new int[2][3];
float *p=new float(3.14);

delete p;
delete []pt;
  • new 会返回一个指向特定数据类型的指针。

  • 通过返回的指针来进行操作,如下例:

Student *p=new Student;
strcpy(p->name,"zhangsan");
p->num=10123;
p->sex="M";
cout<<p->name<<" "<<p->num<<" "<<p->sex<<endl;
delete p;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值