文章目录

  • 一、概述
    • 1、简介
    • 2、C++程序
      • 2.1 初步接触C++
      • 2.2 面向过程
      • 2.3 面向对象
      • 2.4 面向对象的三大特性
        • 2.4.1 封装
        • 2.4.2 继承
        • 2.4.3 多态
    • 3、C++对C的扩展
      • 3.1 双冒号的使用
      • 3.2 namespace关键字
      • 3.3 using生声和using编译指令
      • 3.4 检测增强
    • 4、引用
      • 4.1 基本用法
      • 4.2 参数的传递方式
      • 4.3 引用的注意事项
      • 4.4 本质【指针常量】
      • 4.5 指针的引用
      • 4.6 const引用使用场景
    • 5、类的初步使用
    • 6、内联函数
      • 6.1 引出
      • 6.2 基本概念
    • 7、函数的默认参数
      • 7.1 注意事项
      • 7.2 占位参数
    • 8、函数重载
      • 8.1 介绍
      • 8.2 实现原理
    • 9、封装
    • 10、权限
      • 10.1 私有方法`private`
      • 10.2 保护权限`protected`
      • 10.3 将成员设置成private
    • 11、const
      • 11.1 const是否会影响函数重载

一、概述

1、简介

  • C++中的++来自于C语言中的递增运算符++ ,该运算符将变量加1。
  • C++起初也叫C with cIsss 。通过名称表明,C++是对C的扩展,因此C++是C语言的超集,这意味着任何有效的C程序都是有效的C+ +程序。
  • C++程序可以使用已有的C程序库

:是编程模块的集合,可在程序中导入调用。可节省程序员大量的时间工作量

C++在C上添加面向对象编程和范式编程。且继承了C语言。并且融合了三种不同的编程方式:

  • C语言代表过程性语言;
  • 添加了类代表的面向对象语言;
  • 支持泛型编程。

起源: 与c语言-样,C+ +也是在贝尔实验室诞生的, Bjarne Stroustrup(本贾尼:斯特劳斯特卢普)在20世纪80年代在这里开发了这种语言。

2、C++程序

2.1 初步接触C++

在C++中仍可用#include<>导入,保持原有的库,但也有C++版的库。
如:math.h 在C++中可用cmath

#include<iostream>
/** i:表示输入* o:表示输出* stream:数据流
*/using namespace std;
/** using:使用声明* namespace:命名空间的关键词* std:命名空间的名称
*/int main()
{cout << "Hello World" << endl;/** cout:标准输出流* << :左移运算符【可拼接字符串】* endl:结束换行并刷新缓冲区*/system("pause"); // 阻塞功能,让程序不在往后执行 return 0;
}
2.2 面向过程
  • 面向过程是一种以过程为中心的编程思想。
  • 通过分析出解决问题所需要的步骤,然后用函数把这些步骤实现,使用的时候一个个依次调用就可以了。

面向过程编程思想的核心:

  • 功能分解;
  • 自上向下、逐层细化。

面向过程编程语高存在的主要缺点是

  • 不符合人的思维习惯而是要用计算机的思维方式去处理问题;
  • 语言重用性低,维护困难。
2.3 面向对象

面向对象编程( Object-Oriented Programming )简称OOP技术,是开发计算机应用程序的一种新方法、新思想。【应对变化,提高复用】

过去的面向过程编程常常会导致所有的代码都包含在几个模块中

  • 使程序难以阅读和维护;
  • 在做一些修改时常常牵一动百,使以后的开发和维护难以为继

而使用O0P技术:

  • 要使用许多代码模块,每个模块都只提供特定的功能,它们是彼此独立的;
  • 增大了代码重用的几率,更加有利于软件的开发、维护和升级

在面向对象中,算法与数据结构被看做是个整体,称作对象。现实世界中任何类的对
象都具有一定的属性和操作 , 也总能用数据结构与算法两者合一地来描述。

2.4 面向对象的三大特性
2.4.1 封装

把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

类将成员变量成员函数封装在类的内部,根据需要设置访问权限, 通过成员函数管埋
内部状态。

2.4.2 继承
  • 继承所表达的是类之间相关的关系,这种关系使得对象可以继承另外类对象的特征和 能力

继承的作用:

  • 避免公用代码的重复开发
  • 减少代码和数据冗余。
2.4.3 多态

多态性可以简单地概括为一个接口,多种方法。字面意思为多种形态。程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念

3、C++对C的扩展

3.1 双冒号的使用

双冒号作用域运算符:

  • :::全局运算符;
  • 空间名称:::表示该命名空间下的作用域
3.2 namespace关键字
  • 用来解决命名冲突的问题;
  • 可使用在函数、变量、结构体、类;
  • 命名空间必须定义在全局作用域下;
  • 可以嵌套;
  • 可以在后部进行续写;
  • 若是无名、匿名的命名空间,则相当于静态,只能在本文件内使用;
  • 别名,通过namespace 别名 = 原名 进行修改。
3.3 using生声和using编译指令

声明需要注意二义性

声明:using 命名::变量/常量
当使用就近原则的时候,切在该代码区又声明了命名空间内同种变量或常量时会出现二义性。

using编译指令

编译:using namespace 命名。会避免二义性,就近原则优先。

3.4 检测增强
  • 全局变量检测增强;
    如:在C中全局的变量重新定义不报错,而在C++中会报错。
  • 函数检测增强,参数类型增强,返回值,函数调用传参;
    如:函数没有返回值,参数类型没定义。
  • 类型转化检测增强。
  • 结构体增强,C++中可以添加函数,且在使用的时候可以不加struct;
  • C++中增加bool类型
  • 三目运算符增强,C++中返回的是变量,可直接复制。C中返回的是值。
  • const增强,不可通过指针修改,并且可以初始化数组。

    • C语言:const修饰是一个伪常量,会分配内存;const为外部链接
    • C++:const不会分配内存。若按照C语言的方式去尝试修改值的话。在取地址时,编译器会主动开辟一个临时的地址来暂存该值,而指针修改的是该临时地址中的值。const为内部链接

【注意】当什么时候C++中的const会被分配内存:

  • 取地址时会临时分配内存;
  • extern时也会分配内存;
  • 普通变量初始化(赋值)const;
  • 自定义数据类型(使用结构体);

尽量以const替换define

  • define在预处理阶段就将所有值都进行替换,若有错误编译器不会识别到;
  • define没有定义类型
  • define没有作用域

4、引用

4.1 基本用法

使用&符号,在等号左侧使用表示引用。 数据类型 &别名 = 原名

  • 实质:起别名
  • 通过变量的名字可以使用内存空间
  • 修改引用修改原变量
  • 初始化后不能修改

可结合typedef来使用
typedef int(name)[]; => name &pArr = arr;

#include <iostream>
using namespace std;int main() {int x=0;int& r = x;int x2 = 10;r = x2;cout << r << " " << &r  << " " << x << " " << &x << endl; cout << x2 << " " << &x2 << endl;return 0;
}

4.2 参数的传递方式

在C语言中接触到了值传递地址传递,而在C++中又新增了一个引用传递

  • 引用传递:本质上和地址传递类似,都是对地址进行操控。
  • 传入方式函数名(int &a, int &b);
4.3 引用的注意事项
  • 必须引一块合法的内存空间,且不能为NULL
  • 不要返回局部变量的引用;
  • 若函数的返回值是引用,则这个函数可以作为左值,相等于给该返回值赋值。
4.4 本质【指针常量】

在执行代码:int& n = a => int *const n = &a
赋值时:n = 100 => *n = 200

4.5 指针的引用

引用与指针搭配,让函数间的传递,赋值等操作更加简洁,通俗易懂。

若传递二级指针,则接受参数只需* &p,即可对p进行赋值等操作。传参也只需传入p即可。

4.6 const引用使用场景
  • 常量引用主要用在函数的形参,尤其是类的拷贝或者复制构造函数
  • 将函数的形参定义为常量引用的好处:
    • 引用不产生新的变量,减少形参与实参传递时的开销;
    • 防止实参随形参的改变而改变。

5、类的初步使用

  • 是对对象抽象
  • 对象实例
#include<iostream>
using namespace std;// 定义一个全局常量
const double pi = 3.14;/** 创建一个类:需要再内部public下进行编写,为公共属性* class 类名
*/
class Circle
{public: // 具有公共权限double GetS()// 成员函数{return 2 * pi * R;}int R; // 成员属性 };int main()
{Circle circle;// 创建一个类对象circle.R = 4;// 通过对象访问成员属性,对其进行赋值double S = circle.GetS();// 调用成员函数cout << "S:" << S << endl;system("pause");return 0;
}

例:创建学生类

#include<iostream>
#include<string>
using namespace std;class Stu
{public: // 成员属性int Stu_Num;string Stu_Name;int Stu_Age;// 成员方法void ShowInfo(){cout << "学生:" << Stu_Name << "的学号为:" << Stu_Num << "年龄为:" << Stu_Age << endl;}};int main()
{// 创建对象Stu stu;stu.Stu_Age = 10;stu.Stu_Name = "小明";stu.Stu_Num = 1;stu.ShowInfo();system("pause");return 0;
}

6、内联函数

6.1 引出

在C中,在执行一些较为频繁的计算时,通常会将他写成宏函数,来提高程序的执行效率,而这些都是预处理来完成的。但在C++中会出现部分问题。

  • 比如在编译的时候若出现问题,他不会报错。
  • 且在C++中预处理器不允许访问类的成员,就是说预处理器宏不能用作类的成员函数。

所以,在C++中为了保持跟C语言同样的效率,引入了内联函数

6.2 基本概念
  • 需要在函数前面加上inline,注意函数体声明都要带上该关键字;
  • 内联函数有占用内存空间
  • 优势在于省去了函数调用时候的压栈跳转返回的开销。【以空间换时间】;
  • 任何类内部定义的函数都会自动生成内联函数。

由于C++的限制,编译器不考虑进行内联函数编译的几种情况

  • 不能存在任何形式的循环语句;
  • 不能存在过多的条件判断语句;
  • 函数体不能过于庞大
  • 不能对函数进行取地址操作。

内联函数只是编译器的一个建议。若你没有声明是内联函数,则编译器也可能将此函数做为内联函数

7、函数的默认参数

当函数调用时,若没有该值,则编译器会自动用默认值替换。

7.1 注意事项
  • 若参数中,当前位置有了默认参数,则后续的参数应都为默认参数;int get(int a, int b=1, int c=2)
  • 若函数在声明的时候有默认参数,则在实现函数的时候不用写
7.2 占位参数

只是暂一个位置,调用时需要传入参数,但在函数中不使用

8、函数重载

8.1 介绍
  • 在同一个作用域内,俩个函数作用域相同参数不同【顺序、类型、个数】。
  • 返回值不能作为函数的重载条件。
  • 当函数重载与默认参数一起使用时,要注意避免二义性。
  • const也可以作为重载的条件,当重载与引用结合使用时。由于引用需要一个合法的内存空间。所以使用const修饰,会指向正确的用法。
8.2 实现原理

在使用函数重载时,不同的编译器会将该函数进行重新命名,并且根据不同的数据类型不同的个数来生成不同的函数名来进行区别。

9、封装

  • C语言中行为和属性的封装是分开的
  • 封装是将变量和函数合成一个整体,封装在一个类中;
  • 对变量和函数进行访问控制。

10、权限

  • structclass是一个意思,不同的是默认权限。struct默认是public,class默认是private
10.1 私有方法private
  • 私有的属性只有在类的内部才能访问。
10.2 保护权限protected

类的内部和子类可以访问,外部不能访问。

10.3 将成员设置成private
  • 建议将所有的成员属性设置成私有属性
  • 便于在设置读写权限;在类的公共中设置读取写入的函数。
  • 可以对输入进行判断。通过类中的公共方法对输入的值进行判断区分。

11、const

  • const对象不能调用非const成员函数;
  • 非const对象阔以调用const成员函数;

const一般用于成员函数,限制成员函数不能对类的数据进行修改;

class A {public:A(int a=0) : m_a(a) {}~A(){}int getA() const { return m_a; }
private:int m_a;
};
11.1 const是否会影响函数重载

若出现const出现修饰于函数体,则可被视为函数重载;

class A {public:A(int a=0) : m_a(a) {}~A(){}int getA() const { return m_a; } void func(int& a) const {};void func(int& a) {}private:int m_a;
};

C++ |【01】面向对象基础内容、引用、函数重载等....相关推荐

  1. c 语言重载参数类型不同重载和,C++基础学习之函数重载的简单介绍

    前言 我们在平时写代码中会用到几个函数但是他们的实现功能相同,但是有些细节却不同.例如:交换两个数的值其中包括(int, float,char,double)这些个类型.在C语言中我们是利用不同的函数 ...

  2. JAVA面向对象的总结(函数重载与数组)

    函数重载 定义:在一个类中存在两个或者两个以上的同名函数,这些函数就叫做函数的重载 作用:同一个函数名可以出现不同的函数,以应对个数或者数据类型不同的参数 要求:1.函数名一致 2.形式列表不一致(对 ...

  3. getline没有与参数列表匹配的重载函数_C++新增基础功能解析—函数重载功能的使用...

    喜欢的可以收藏转发加关注 "函数重载"指的是可以有多个同名的函数,因此 名称进行了重载.这两个术语指的是同一回事,但我们通常使用函数重载.可以通过函数重载来设计• 系列函数--它们 ...

  4. C++基础教程之函数重载,什么是C++函数重载?

    在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同.例如希望交换两个变量的值,这两个变量有多种类型,可以是 int.float.char.bool 等,我们需要通过参数把变量的地址传 ...

  5. Java第五天笔记01——面向对象基础

    目录 1.面向过程和面向对象的编程思想 2.类的定义 3.成员变量.局部变量.静态变量的区别 4.类和对象的关系 5.对象的创建 6.创建对象原理 7.垃圾回收机制 8.构造方法 9.Java包 10 ...

  6. C++基础知识 —— 内存分区模型、引用、函数重载、类和继承、this指针、友元、多态、文件操作

       参考 黑马程序员 C++课程笔记,个人理解及整理  可以使用 在线编译c++代码 来简单验证.学习代码 目录 C++核心编程 1. 内存分区模型 1.1 程序运行前 1.2 程序运行后 1.3 ...

  7. C++ 基础 : 函数重载、引用、内联函数、auto、范围for循环

    函数重载 引用 内联函数 auto 范围for循环 函数重载 C++中引入了一个新特性,函数重载. 在同一个作用域下,对于相同的函数名,函数的参数不同,不同类型的参数顺序不同,参数的个数不同,都可以形 ...

  8. 笔记②:牛客校招冲刺集训营---C++工程师(面向对象(友元、运算符重载、继承、多态) -- 内存管理 -- 名称空间、模板(类模板/函数模板) -- STL)

    0618 C++工程师 第5章 高频考点与真题精讲 5.1 指针 & 5.2 函数 5.3 面向对象(和5.4.5.5共三次直播课) 5.3.1 - 5.3.11 5.3.12-14 友元 友 ...

  9. JavaSE——面向对象基础(思想、类与对象、构造方法、重载、匿名对象)

    第1节 面向对象基础 一.面向对象思想 1.1 概述 面向对象(Object Oriented)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,是一种对现实世界理解和抽象的方法,是计算 ...

最新文章

  1. Android进程优先级和垃圾回收机制
  2. 002_JavaScript的历史
  3. d+java.ext.dirs_Java-JDK9-Djava.ext.dirs is not supported
  4. c#中的非托管资源释放 (Finalize和Dispose)
  5. 【hihocoder - offer编程练习赛60 A】hohahola(贪心,二分)
  6. 【转载】移植FFMpeg到VC环境心得
  7. 解决重启centos后resolv.conf总被清空的问题
  8. 虚拟ip是什么意思_轻松了解基于Ip,Mac,组播的Valn是什么意思,通信基础第17篇...
  9. cmake常用语法参考
  10. 环境变量PATH cp命令 mv命令 文档查看cat/more/less/head/tail
  11. JQuery 四个常用的DOM操作获得内容 - text()、html()、value 以及 val() ;取属性值attr()----前三个有回调函数
  12. JS中的this指向
  13. (翻译)线框图和设计原型图之间的区别是什么?
  14. 卓有成效的管理者—第一章 卓有成效是可以学会的
  15. mysql 1055 - Expression 解决
  16. 【[中文直播] 第21期 | UE4数据驱动开发 | Epic 大钊】课程笔记
  17. 【GNN应用】金融风控领域
  18. API接口管理平台-rap
  19. 芯片验证漫游指南_IC验证入门资料
  20. javascript判断常用浏览器版本和类型兼容处理

热门文章

  1. Mysql关键字详解
  2. matlab设置坐标轴/字体/颜色
  3. 电子商务二级计算机水平考试,电子商务专业计算机二级考试考office高级有用还是access有用...
  4. 动森amiibo数据_动森岛屿规划神器来了!还有 6 款超实用的辅助工具
  5. Dapper的效率问题的总结
  6. 格基规约算法:算法详解
  7. 食事の時、日本人は箸を使います。
  8. php日期24格式,php日期格式转换
  9. C语言数字图像处理进阶---13 Ins1977滤镜
  10. 就这样,我把4000张美女和帅哥照片下载本地了