C++基础知识

C++与C的区别

 

C++是C的增强版本

C++是完全兼容C,只要是合法的C的程序在C++中都是合法的!

C++中扩展了很多内容

数据类型:引用、类类型、布尔类型等!关键字:friend、class、bool、public等!  

编程思想是不一样的

C语言是面向过程的结构化的程序设计语言,中级语言。

C++是面向对象的编程语言,更接近自然界的发展规律!

一、基本概念

命名空间  

解决问题:解决命名冲突的问题!变量、函数、自定义的数据类型

命名空间格式

             namespace 命名空间的名字{可以有变量,也可以有函数,还可以有自定义的数据类型};

     使用:

                命名空间名字::变量等!

                使用using namespace 命名空间名字; 切换到对应的范围中,直接使用即可!

 C++中标准的命名空间 std  里包含了c++中所有的库--头文件

标准输入输出流

输入流对象:   cin

使用: cin>> 变量;

输出流对象: cout

使用:cout<< 变量;

好处: 输入输出不需要做格式的限制,使用简单

引用

什么是引用: 就是给变量起别名,变量是已经存在的,别名和变量指的是同一块内存空间!

定义的格式:  数据类型 &引用名 = 变量名;

              Int p = 10;

              Int &pt = p;  // 这里的pt就是给p起的别名

引用与指针的区别:

  1. 引用是给变量起别名;指针是用来保存地址;
  2. 定义指针变量系统会给分配内存空间,定义引用不会额外的分配内存空间;
  3. 指针变量定义完之后可以不进行初始化,但是一般为了避免野指针,会初始化为NULL;

引用定义完必须进行初始化

4.指针变量是可以改变指向,但是引用一旦初始化之后不可以改变指向。使用引用比使用指针安全!

5.应用:都可以设计成函数的参数类型。

说明一个常量的方法:

使用宏定义

使用const修改引用---通常应用在函数参数设计上!

函数重载

解决问题:函数功能相似,参数不同(参数类型不同)的一组函数,解决函数名命名困难的问题!(在C语言中不能出现同名函数)

函数重载定义: 函数名相同,函数功能要相似,参数不同(参数类型不同、参数个数不同、参数类型的顺序不同),与返回值类型无关的一组函数!

为什么在C中不可以有同名函数,而C++中允许有

使用gcc和g++分别去编译了同一个.c源文件,观察了可执行二进制文件,发现:

  使用gcc编译完之后,函数名没有发生变化

使用g++去编译的时候,函数名发生变化了,函数名字根据函数参数类型以及个数进行重命名!

函数名不同,函数在内存中的地址就不同!

总结

函数重载的原理: 使用g++进行编译的时候,函数名会根据参数类型以及参数个数进行重命名,函数名字不一样,函数在内存中的地址就不同,调用的时候执行的就是不同的函数体!

 参数默认值

什么是参数默认值:就是在函数定义的时候给了形参一个初始值。

当我们在调用函数的时候,可以选择性的给这个参数值,可以给它值也可以不给它值!如果不给它值,按默认值参与函数体中的运算;如果给了它值,就按给的值参与函数体中的运算!

当函数参数有默认值,可以解决函数重载中 只有参数个数不同的而造成的代码冗余!

在设计函数参数默认值的时候要注意:

   1.参数默认值给的顺序是 从右向左的;调用函数的时候参数匹配的顺序是从左向右的!

   2.在函数重载中,当函数参数有默认值的时候要注意二义性,不然就会出错!

 解决方案:保留参数个数多的函数  参数都给默认值

3.当函数声明和函数定义同时存在的时候,参数的默认值只能出现一次,建议放在函数声明的地方!

如何判读编译器是g++还是gcc?

方法1:

 方法2:计算一个字符占的内存大小,也可以来区分!!!

动态内存分配

C中的动态内存分配:

malloc库函数

free库函数

C++中有提供另外的动态内存分配的方法:

New运算符 –开空间

Delete运算符—释放空间

书写格式:

    数据类型 *指针变量 = new 数据类型; ==》  delete 指针变量;

  数据类型 *指针变量 = new 数据类型[个数]; ==》  delete [] 指针变量

面试题目: new和malloc的区别?

  1. New是C++中的运算符,malloc是C中标准的库函数;
  2. 书写: new后面只要跟数据类型即可,并且开空间后不需要进行强制类型转换;

Malloc开空间:要给开空间的大小,并且开空间后要进行强制类型转换;

3.New开的空间用delete去释放; malloc开的空间free去做释放;

4.New开的空间可以让做初始化,malloc开的空间初始化要自己用memset去做;

5.对于类类型来说,new的方式去创建对象,会自动的调用构造函数;delete释放对象的时候会自动调用析构函数;

Malloc是不会执行构造函数的,free是不会执行析构函数的!!!

面试题目:为什么有了malloc和free还需要new和delete?

new的方式去创建对象,会自动的调用构造函数;delete释放对象的时候会自动调用析构函数;

Malloc是不会执行构造函数的,free是不会执行析构函数的!!

二、面向对象编程中的类与对象

  1. C++中的结构体与C中结构体的区别?

<1>.c结构体中不能有函数;而C++结构体中是可以有函数的!

<2>.c中空结构体的大小为0字节;C++中空结构体的大小为1字节

C中的结构体面向对象不彻底,C++中面向对象,就是把属性和行为整合在一起来完整的描述一类事物! 可以用结构体,但是他有提供专门的一种数据类型来表示的!

什么是类为了描述一类事物的属性和行为而自定义的一种数据类型!

          把属性和行为整合在一起   {}

 类的关键字: class

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

じ刂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值