2021-03-08

c++ 3.8



命名空间:

  • 为了解决合作开发时的命名冲突问题,C++ 引入了命名空间(Namespace)的概念
  • ::是一个新符号,称为域解析操作符,在C++中用来指明要使用的命名空间
  • 计划重新编写库,将类、函数、宏等都统一纳入一个命名空间,名字为std,std 是 standard 的缩写,意思是“标准命名空间
#include <iostream>
#include <string>
int main(){
    //声明命名空间std
    using namespace std;
   
    //定义字符串变量
    string str;
    //定义 int 变量
    int age;
    //从控制台获取用户输入
    cin>>str>>age;
    //将数据输出到控制台
    cout<<str<<"已经成立"<<age<<"年了!"<<endl;
    return 0;
}
  • using namespace std;它声明了命名空间 std,后续如果有未指定命名空间的符号,那么默认使用 std
  • 在 main() 函数中声明命名空间 std,它的作用范围就位于 main() 函数内部,如果在其他函数中又用到了 std,就需要重新声明

头文件

  • 老式 C++ 的iostream.h变成了iostream,fstream.h变成了fstream。而对于原来C语言的头文件,也采用同样的方法,但在每个名字前还要添加一个c字母,所以C语言的stdio.h变成了cstdio,stdlib.h变成了cstdlib
  • 原来的库复制一份,在此基础上稍加修改,把类、函数、宏等纳入命名空间 std 下,就成了新版 C++ 标准库
  • 新的 C++ 头文件,头文件的内容在命名空间 std 中
  • 对于不带.h的头文件,所有的符号都位于命名空间 std 中,使用时需要声明命名空间 std;对于带.h的头文件,没有使用任何命名空间,所有符号都位于全局作用域
  • C++ 新增的头文件,例如 iostream、fstream、string 等

输入输出

定义:输入即可视为从文件或键盘中输入程序中的一串数据流,而输出则可以视为从程序中输出一连串的数据流到显示屏或文件中

  • cin表示标准输入、cout表示标准输出、cerr表示标准错误
  • cin 连续输入:cin>>x>>y;
  • cout 连续输出:cout<<"The int number is x= "<<x<<endl;
  • 输入运算符>>在读入下一个输入项前会忽略前一项后面的空格,所以数字 8 和 7.4 之间要有一个空格,当 cin 读入 8 后忽略空格,接着读取 7.4

动态内存

  • 在C语言中,动态分配内存用 malloc() 函数,释放内存用 free() 函数
int *p = (int*) malloc( sizeof(int) * 10 );  //分配10个int型的内存空间
free(p);  //释放内存
  • 在C++中,这两个函数仍然可以使用,但是C++又新增了两个关键字,new 和 delete:new 用来动态分配内存,delete 用来释放内存。
int *p = new int;  //分配1个int型的内存空间
delete p;  //释放内存

int *p = new int[10];  //分配10个int型的内存空间
delete[] p;

const关键字

定义:const本意是不变的,在 C++ 中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。

  • 修饰普通变量 const int a = 7;
    int b = a; // 正确
    a = 8; // 错误,不能改变
const int  a = 7;
int  *p = (int*)&a;
*p = 8;

我们取变量的地址并转换赋值给 指向 int 的指针,然后利用 *p = 8,
但是输出的结果仍然是 7

  • const 修饰指针变量
    A: const 修饰指针指向的内容,则内容为不可变量。(指针指向的内容 8 不可改变。简称左定值,因为 const 位于 * 号的左边)
const int *p = 8;

B: const 修饰指针,则指针为不可变量。( const 指针 p 其指向的内存地址不能够被改变,但其内容可以改变。简称,右定向。因为 const 位于 * 号的右边。)

int a = 8;
int* const p = &a;
*p = 9; // 正确
int  b = 7;
p = &b; // 错误

C: const 修饰指针和指针指向的内容,则指针和指针指向的内容都为不可变量。(const p 的指向的内容和指向的内存地址都已固定,不可改变)

int a = 8;
const int * const  p = &a;

总结为:左定值,右定向,const修饰不变量

未完待续。。。


函数

内联函数

背景:程序在执行一个函数之前需要做一些准备工作,要将实参、局部变量、返回地址以及若干寄存器都压入栈中,然后才能执行函数体中的代码;函数体中的代码执行完毕后还要清理现场,将之前压入栈中的数据都出栈,才能接着执行函数调用位置以后的代码

如果函数体代码比较多,需要较长的执行时间,那么函数调用机制占用的时间可以忽略;如果函数只有一两条语句,那么大部分的时间都会花费在函数调用机制上

定义:为了消除函数调用的时空开销,C++ 提供一种提高效率的方法,即在编译时将函数调用处用函数体替换,类似于C语言中的宏展开。这种在函数调用处直接嵌入函数体的函数称为内联函数(Inline Function),又称内嵌函数或者内置函数。

实例:

inline void swap(int *a, int *b)
{...}

int main()
{... swap(..,..)...}

默认参数

定义:在C++中,定义函数时可以给形参指定一个默认的值,这样调用函数时如果没有给这个形参赋值(没有对应的实参),那么就使用这个默认的值

//带默认参数的函数
void func(int n, float b=1.2, char c='@'){
    cout<<n<<", "<<b<<", "<<c<<endl;
}
int main(){
    //为所有参数传值
    func(10, 3.5, '#');
    //为n、b传值,相当于调用func(20, 9.8, '@')
    func(20, 9.8);
    //只为n传值,相当于调用func(30, 1.2, '@')
    func(30);
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值