C++笔记(Ⅰ)

C与C++的关系
  1. C是C++的子集
  2. C语言是面向过程,而C++是支持面向过程和支持面向对象
C++的新特点(与C语言相比)
类型:
  • 基本算数类型:bool(布尔类型)、char(字符)、wchar_t(宽字符)、char16_t(Unicon字符)、char32_t(Ubicode字符)、short(短整型)、int(整型)、long(长整型)、long long(长整型)、float(单精度浮点数)、double(双精度浮点数)、long double(扩展精度浮点数)
  • 基本类型:整型(int)、字符型(char)、单精度实型(float)、双精度实型(double)、数组类型、结构类型(struct)、联合类型(union)、枚举类型(enum)、指针类型、空类型(void)、布尔类型(bool)
初始化方法:
  1. 复制初始化
  int x=1024;
  1. 直接初始化
  int x (1024);
随用随定义:

在C语言当中,所有变量定义必须位于函数体的最前面
在C++中,所有的变量随用随定义

C++的输入输出方式
  • cout语法形式:
//例子
  cout<< x << endl;
  • cin语法形式:
  cin >> x;

不用关注占位符,不用关注数据类型

//例子,提示用户输入一个整数,将该整数分别以8进制,10进制,16进制打印在屏幕上
//例子:提示用户输入一个布尔值,以布尔方式将值打印在屏幕上
#include<iostream>
#include<stdlib.h>
using namespace std;

int main(void){
  int x=0;
  cout << "请输入一个整数:"<< endl
  cin >>x;
  cout << oct <<x <<endl;
  cout << dec <<x <<endl;
  cout << hex <<x <<endl;

  cout << "请输入一个布尔值:" << endl;
  bool y=false;
  cin >> y;
  cout << boolalpha <<y <<endl;

  system("pause");
  return 0;
}
C++的命名空间(namespace)
  • 命名空间:简单来说就是划片取名字
  • 命名空间存在的原因:避免不同库下的变量名或者程序名一样而无法区分的问题
  • 命名空间的定义:
    命名空间关键字:namespace,命名空间的名字不可以说重复
#include<stlib.h>
#include<iostream>
//注意:用命名空间后面要加;
using namespace std;
//举个例子
//定义命名空间A
namespace A
{
  int x=1;
void fun(){
  cout << 'A' <<cout;
  }
}
//定义命名空间B
namespace B
{
  int x=2;
void fun(){
  cout << 'B' <<endl;
  }
}
//另一处需要使用A的x和B的f1()
int main(void){
  cout << A::x << endl;
  B::fun();
  system("pause");
  return 0;
}
C++语言的引用
  • 引用就是指变量的别名;
  • 引用必须被初始化;
  • 引用类型的初始值必须是一个对象;
  • 引用并非对象,它只是为一个已经存在的对象所起的另外一个名字。
//例子,基本数据类型的引用
#include<iostream>
using namespace std;
int main(void)
{
 int a =3;
 int &b =a; //引用必须初始化
 //定义一个b,b是a的引用,从地址角度理解会理解偏
 b = 10;
 cout<<a<<endl;
 return 0;
}
  • 指针本身就是一个对象,指针无需在定义时赋初值
//方便理解c++中指针和引用
#include<iostream>
using namespace std;
int main(void){
 int a =10;
 int *p =&a; //设置指针p指向a的地址,定义指针时必须加*号,之后使用时p就是指针,*p表示的是p指针指向的地址里面存放的数
 int *&q=p; //为指针p设置别名
 *q = 20;

 cout<<&a<<endl; //输出结果0018FF44
 cout<<a<<endl; //输出结果是20
 cout<<*p<<endl; //输出结果是20
 cout<<p<<endl; //输出结果是0018FF44
 cout<<*q<<endl; //输出结果是20
 cout<<q<<endl; //输出结果是0018FF44
}
const关键字
  • const与基本数据类型:
    加const的基本数据类型意味着是一个常量
  • const与指针类型:
//例子1
int x =3;
const int *p = &x;
//p = &y; 正确
//*p = 4; 错误

//例子2
int x = 3;
int *const p = &x;
//p = &y; 将是错误的

//例子3
const int x = 3;
const int *const p = &x;
//p= &y; *p=4; 都是错误的
  • const与引用:
//例子
int x = 3;
const int &y = x;
//x = 10;正确
//y = 20;错误

用权限小的来接收权限大的是可以的,但是用权限大的来接收权限小的是不可以的,因为不安全。

//下例不正确
const int x = 3;
int *y = &x;
//下例正确
int x = 3;
const int *y = &x;

const和define宏定义的常量的区别在于:
const在编译的时候还会进行检查,而define宏定义的常量不再会进行检查,因此在实际使用中推荐使用const定义常量。

C++函数新特性
  • 函数参数默认值
    有默认参数值的参数必须在参数表的最右端
//正确例子
void fun(int i,int j=5,int k=10);
//错误例子
void fun(int i, int j=5, int k);

在函数声明的时候写默认值,而在实际定义的时候最好不加默认值,避免有些编译器不过:

//正确例子
//声明时
void fun(int i,int j=5,int k=10);
//定义时
void fun(int i,int j,int k)
{
  cout<<i<<j<<k;
}
  • 函数重载:
    作用域是程序的一部分,C++语言中大多数作用域都以花括号分隔。
    相同作用域内,用同一函数名定义多个函数,多个函数之间参数个数和参数类型不同
  • 内联函数:
    编译时将函数体代码和实参代替函数调用语句
//例子来讲解内联函数
//内联函数关键字:inline
inline int max(int a,int b,int c);
int main()
{
int i=10,j=20,k=30,m;
m = max(i,j,k);
cout<<"max="<<m<<endl;
return 0;
}
//调用之后会化解成什么样子的代码
int main()
{
int i= 10,j = 20,k = 30,m;

 int a,b,c;
 a=i;
 b=j;
 c=k;
 if(b>a) a=b;
 if(c>a) a=c;
 m=a;

cout<<"max="<<m<<endl;
return 0;
}

不是所有函数都使用内联方式的原因:

  1. 内联编译是建议性的,由编译器决定(你能做的只是加了inline代表你建议计算机这个函数用内联编译来做)
  2. 逻辑简单,调用频繁的函数建议使用内联。(不能包含for循环、while循坏这样较为复杂的逻辑结构)
  3. 递归函数无法使用内联方式。
C++内存管理

内存的本质是一种资源,由操作系统来掌控,程序员能做的是向操作系统申请和归还操作资源。
申请和归还内存资源就是内存管理。

  • 申请内存 new
  • 释放内存 delete
  • new和delete都是一种运算符
  • C语言中使用malloc和free来申请和释放内存
//申请内存的注意事项:申请内存时需要判断是否成功
int *p = new int[1000];
if(NULL == p)
{
 //内存分配失败
}
//释放内存的注意事项:释放内存的同时还要注意释放完后,还要将该指针置为空
delete p;
p = NULL;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值