zoukankan      html  css  js  c++  java
  • C++概要简介

    从C到C++

    新类型 bool类型

    新的输入输出方式 con cout

    新的内存存储方式 new delete

    引用& 用于传参

    函数 内敛函数inline 通过代码区膨胀 减少函数的跳转时间 用来代替c语言的宏定义 放在函数的前面

    重载 函数名相同参数不一样 参数类型相同 参数个数不一样 在编译的时候相同函数名存储的形式不一

    缺省 定义的时候 给参数赋默认值 调用函数 可以不用给缺省的参数赋值 缺省条件从右向左

    命名空间

    using namespace std;

    防止函数冲突

    命名空间的三种方法

    using namespace std; 最不安全 最简单 可以直接调用命名空间std里面的函数cin>>x;

    std::cin>>x;最安全最麻烦 每次调用函数 都需写命名空间std

    using std::cin; cin>>x见于上面两个之间 调用什么就在using 命名空间里写什么

    域名解析符::

    类和对象

    结构体 成员变量  点运算符 箭头运算符 

    类  成员函数 在类中定义 使用this来访问成员 必须用对象调用或者对象指针调用 

      成员函数在类外定义 需要函数名前面加上类名 使用域名解析符进行定义

       访问权限 共有public 可以在外部访问 私有private 受保护 protected 不能在外部访问

    类是私有的结构体  结构体是公有的类

    构造析构

    函数名和类名相同就是构造 可以有多个 可以重载 可以缺省 根据对象的参数来调用哪一个构造

    在类名和函数名前没加~代表析构 只有一个 没参数 

    构造和析构都没有返回值 在一个类的定义的时候 编译器会自动加上构造和析构

    const修饰成员  const修饰成员变量 必须初始化形参列表赋值 

    const修饰成员函数 函数后面加航const  防止使用this执政来修改成员的值

    拷贝构造

    拷贝构造是一种特殊的构造 

    对象在定义的时候 可以调用拷贝构造 也可以调用其他构造  如果参数是同类型的对象 那么调用拷贝构造  拷贝构造的 形参必须使用引用(规定)

    参数是对同一类型对象的引用

    拷贝的两种方案 深拷贝和浅拷贝

    深拷贝每个指针单独指向一块内存   对于对内存 每次开辟新的内存 存放内容 不让两个指针指向同一块区域

    static修饰的成员 变量不属于某个对象 属于全部的对象 整个类和这个给类的所有对象 全部共享一份static变量  必须在类外初始化

    static修饰成员函数  成员函数前没加上static 里面没有this指针无法访问普通成员

    运算符重载

    友元 friend 可以访问对象的私有成员 不属于类 因此没有this指针 

    可以访问该类对象的成员 包括私有

    重载运算符操作数是几个 就有几个参数

    friend返回值类型 operator运算符(参数a,参数b)

    运算符重载 想要使用什么运算符 就堆什么运算符进行重载 

    operator+运算符 函数名 重载方式

    成员函数的调用方式 双目运算符 只需要一个额外的参数  另外一个参数是this

    A A::operator+(const A&b); 引用提高效率  const防止修改

    继承

    继承是在原有类的基础上 创造一个新的类 子类会继承父类所有的成员变量  父类有的子类都有

    原有类称为父类或者基类 新类称为子类或者派生类父类派生子类 子类继承父类

    权限控制 继承之后堆一些访问权限做了修改 父类的私有成员在子类中不可访问

    子类在父类的基础上加了新的成员

    子类可以定义与父类同名的变量或者函数 父类得到隐藏 优先调用子类的新成员

    父类的构造和析构不能用于子类 子类需要的时候需要重写父类的构造和析构 所有子类的构造和析构都要调用父类的构造

    子类先调用父类的构造 然后再调用子类的构造 子类先调用自己的析构然后再调用父类的析构

    多态

    一种形式多种状态

    实现方式 虚函数 父类指针/引用可以指向子类对象 优先调用父类函数

    子类重写父类函数 用父类指针可以调用子类重写的函数

    动态联编 调用的时候才知道调用那个函数 使用函数指针根据指针找到函数 比较灵活速度不快

    静态联编 再运行前就知道调用什么函数 速度比较快但 不灵活

    虚表 拥有虚函数的对象中会有虚表指针 这个指针指向虚函数表(表中存放虚函数地址)

       子类重写父类虚函数是区修改虚表中的地址

    文件操作

    文件分为二进制文件和文本文件

    文本文件:txt cpp直接能打开的文件 字符流

    二进制文件 需要特定的软件才能打开 字节流

    c语言通过文件执政来操作 FILE *fp 所有的操作围绕文件指针来进行

    文件流 ifstream 只写文件  ofstream 只读文件

    fstream 打开关闭open close is_open  读写文件 get/put read/write getline 输入输出运算符

    操作seekp  移动文件的位置  tellp 得到文件指针的偏移量

    异常处理

    计算的时候 遇到除法 除数是0的情况 文件打开失败 申请对内存的时候失败

    运行的时候遇到非代码错误的问题 遇到之后 提交给调用方处理

    处理方式 try 测试代码  catch 捕获异常 throw 抛出异常

    处理不了给上级 如果最终无人处理或者处理不了 结束程序

    C11标准

    变量初始化 int a=0,a(0),a{0};

    nullptr 相当于c中的NULL 有变量的类型更加的安全

    auto 自适应类型 自动类型 根据你赋的值来确定变量的类型

    decltype 一个括号时用一个变量定义同类型的变量 两个括号时该类型的引用

    关于for的一个用法 for(auto i:arr);遍历arr数组中所有的元素

    类型别名 C语言typedef typedef int INT typedef 类型 别名

         C++ using 别名=类型名

    类中成员 一般是在构造中赋值 C11可以直接在类中赋值

    A()=default;自动生成默认构造

    委托 在构造中调用自己的其他构造

    final 终极类或者终极函数 不能使用虚函数 不能派生子类

    模板

    template<class T> 写和类型无关的代码 调用的时候传入类型

    函数模板 函数(参数)  隐性调用 通过参数确定T类型

    函数<类型>(参数) 显示调用 直接传入T的类型

    类模板 类名<类型> 对象名

  • 相关阅读:
    [已解决]报错:Failed to restart network.service: Unit network.service not found
    [已解决]PostgreSQL报错:cannot begin/end transactions in PL/pgSQL解决方法
    Navicat连接Hive
    [已解决]报错:The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone.
    [已解决]报错:Unknown system variable 'query_cache_size'
    [已解决]报错: Unable to load authentication plugin 'caching_sha2_password'.
    python小练习
    Oracle消除重复记录的几种方式
    Android支持ARM架构软件包安装Genymotion-ARM-Translation_for_8.0
    Centos7上安装DBDIFF
  • 原文地址:https://www.cnblogs.com/liugangjiayou/p/11401995.html
Copyright © 2011-2022 走看看