【C++】C++入门知识

简介: 【C++】C++入门知识

作者:一个喜欢猫咪的的程序员

专栏:《C++》

喜欢的话:世间因为少年的挺身而出,而更加瑰丽。                                  ——《人民日报》


目录

1.C++关键字

2.命名空间

2.1局部变量和全局变量

2.2命名空间的概念及使用

2.3std命名空间

3.C++输入&输出

4.缺省参数

4.1缺省参数的概念及使用

4.2全缺省和半缺省

编辑 5.函数重载

5.1函数重载的使用

5.2函数重载的底层原理


C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式

等。熟悉C语言之后,对C++学习有一定的帮助,本篇博客主要目标:


  • 补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的,比如:作用域方面、IO方面、函数方面、指针方面、宏方面等。
  • 为后续类和对象学习打基础。


1.C++关键字


C++总计63个关键字,C语言32个关键字

这些关键字不需要特别记


2.命名空间


2.1局部变量和全局变量

C语言中,局部变量优先于全局变量

int a = 10;
void f1()
{
  int a = 1;
  printf("%d\n", a);//运行结果为1
}

在有局部变量的情况下,如何使用全局变量

在全局变量前面加::(域作用限定符

int a = 10;
void f1()
{
  int a = 1;
  printf("%d\n", a);//运行结果为1
  printf("%d\n", ::a);//运行结果为10
}

C语言在 变量重命名的时候,但都不能被改变量名时,没有很好的办法解决


2.2命名空间的概念及使用

命名空间(namespace)——命名空间域,只影响使用,不影响生命周期


c++当变量重命名的时候,但都不能被改变量名时,就需要命名空间


命名空间可以嵌套,甚至可以多次嵌套


变量放在命名空间内

namespace Bbit
{
  struct node
  {
    struct node* next;
    int val;
  };
  struct queue
  {
    struct node* head;
    struct node* tail;
  };
  int min = 1;
}
using namespace Abit;
using namespace Bbit;
int main()
{
  //struct node a;//默认在局部和全局找,而现在结构体在命名空间内
  struct Abit::node a;
  struct Bbit::node b;
  Abit::min++;
  cout << "12346" << endl;
  Bbit::min++;
  return 0;
}
  • 当变量不是放在命名空间时,变量默认在局部和全局找。
  • 当变量放在命名空间时,变量默认先去命名空间找,然后再去局部和全局找。

2.3std命名空间

std是C++标准库的命名空间


1. 在日常练习中,建议直接using namespace std即可,这样就很方便。

2. using namespace std展开,标准库就全部暴露出来了,如果我们定义跟库重名的类型/对

象/函数,就存在冲突问题。该问题在日常练习中很少出现,但是项目开发中代码较多、规模

大,就很容易出现。所以建议在项目开发中使用,像std::cout这样使用时指定命名空间 +

using std::cout展开常用的库对象/类型等方式。


3.C++输入&输出


cin标准输入流,cout标准输出流


  • 1.使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件以及按命名空间使用方法使用std。
  • 2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含头文件中。
  • 3. <<是流插入运算符,>>是流提取运算符。
  • 4.cin,cout会自动识别类型,不需要%d %s
int main()
{
  //<<流插入
  //endl 相当于换行符
  cout << "hello world" << endl;
  cout << "hello world" << endl;
  int i;
  //>>流输出
  cin >>i ;
  return 0;
}

4.缺省参数


4.1缺省参数的概念及使用


缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实

参则采用该形参的缺省值,否则使用指定的实参。


缺省参数说的简单点,就是给函数参数写默认值

返回值类型 函数名 (参数类型 参数名=x)(x为任意常数/全局变量)


有缺省参数时:


  • 当函数调用的时候,有传函数参数时,就用传过来的函数参数,没有传函数参数就用缺省参数的值
void func(int a=10)//这里的a就是缺省参数
{
  cout << a << endl;
}
int main()
{
func();
return 0;
}

4.2全缺省和半缺省

缺省参数的使用分为全缺省和半缺省

  • 全缺省:有n个函数参数,就需要设置n个缺省参数
  • 半缺省:有n个函数参数,设置k(n>k>0)个缺省参数

半缺省的规则:

半缺省必须从右往左缺省


在有缺省参数的情况下,只能不给有缺省参数的函数参数传值,没有缺省参数的函数必须传值

void func1(int a = 10, int b = 20, int c = 30)
{//全缺省
  cout << a << endl;
  cout << b << endl;
  cout << c << endl;
}
int main()
{
  /*func(15);
  func();*/
  func1(1, 2, 3);
  func1(1, 2);
  func1(1);
  func1();
  //func1(, 20, );//跳着传不可以
  return 0;
}
  • 声明和定义缺省参数不能在函数声明和定义中同时出现


5.函数重载


5.1函数重载的使用

函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这

些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型

不同的问题。


函数重载:


  • 1.函数名和返回类型相同
  • 2.参数个数 或 类型 或 类型顺序有一种或者多种不同
int Add(int left, int right)
{
  cout << "int Add(int left, int right)" << endl;
  return left + right;
}
double Add(double left, double right)
{
  cout << "double Add(double left, double right)" << endl;
  return left + right;
}

5.2函数重载的底层原理

C语言中函数调用是通过函数名进行查找的。


C++函数重载后,很明显就不可以通过函数名查找,通过函数的修饰名查找


由于Windows下vs的修饰规则过于复杂,而Linux下g++的修饰规则简单易懂,下面我们使

用了g++演示了这个修饰后的名字。

通过下面我们可以看出gcc的函数修饰后名字不变。而g++的函数修饰后变成


  • 【_Z+函数长度+函数名+类型首字母】。

vs的情况


相关文章
|
2月前
|
编译器 C++
C++入门12——详解多态1
C++入门12——详解多态1
47 2
C++入门12——详解多态1
|
2月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
39 3
|
2月前
|
存储 编译器 C语言
C++入门2——类与对象1(类的定义和this指针)
C++入门2——类与对象1(类的定义和this指针)
51 2
|
2月前
|
C++
C++入门13——详解多态2
C++入门13——详解多态2
89 1
|
2月前
|
程序员 C语言 C++
C++入门5——C/C++动态内存管理(new与delete)
C++入门5——C/C++动态内存管理(new与delete)
92 1
|
2月前
|
编译器 C语言 C++
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
31 1
|
2月前
|
存储 编译器 C++
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
51 1
|
2月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
70 0
C++入门6——模板(泛型编程、函数模板、类模板)
|
2月前
|
存储 安全 编译器
【C++打怪之路Lv1】-- 入门二级
【C++打怪之路Lv1】-- 入门二级
32 0
|
2月前
|
自然语言处理 编译器 C语言
【C++打怪之路Lv1】-- C++开篇(入门)
【C++打怪之路Lv1】-- C++开篇(入门)
39 0