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的类型
类模板 类名<类型> 对象名
C++概要简介的更多相关文章
- 【RS】AutoRec: Autoencoders Meet Collaborative Filtering - AutoRec:当自编码器遇上协同过滤
[论文标题]AutoRec: Autoencoders Meet Collaborative Filtering (WWW'15) [论文作者]Suvash Sedhain †∗ , Aditya K ...
- 限制q-error,防止产生次优计划
原文:<Preventing bad plans by bounding the impact of cardinality estimation errors> 摘要 文章定义了一个衡量 ...
- [旧][Android] ButterKnife 浅析
备注 原发表于2016.05.08,资料已过时,仅作备份,谨慎参考 前言 自上星期写 Retrofit 写吐之后 ... 我问大队长能不能换个其他什么东西写,大队长就说了个单词 ButterKnife ...
- 数据库之一、数据库简介及SQL概要
1.数据库简介: 数据库(Database,DB)是一个长期存储在计算机内的.有组织的.有共享的.统一管理的数据集合.简单来讲就是可以放大量数据的地方.管理数据库的计算机系统称为数据库管理系统(Dat ...
- word2vec (一) 简介与训练过程概要
摘自:http://blog.csdn.net/thriving_fcl/article/details/51404655 词的向量化与word2vec简介 word2vec最初是Tomas Miko ...
- TypeScript的概要和简介
安装 Typescript的基本介绍可以自行百度 centos虚拟机中可以完整的体验, virtualbox安装开发版本,选择开发工具项,否则增强功能无法安装[提示kernel 头文件缺失,yum安装 ...
- HTTPS简介
一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...
- 前端MVC学习总结(一)——MVC概要与angular概要、模板与数据绑定
一.前端MVC概要 1.1.库与框架的区别 框架是一个软件的半成品,在全局范围内给了大的约束.库是工具,在单点上给我们提供功能.框架是依赖库的.AngularJS是框架而jQuery则是库. 1.2. ...
- Mosquitto搭建Android推送服务(一)MQTT简介
总体概要: MQTT系列文章分为4部分 1.MQTT简介 2.mosquitto服务器搭建 3.编写Mosquitto的可视化工具 4.使用Mosquitto完成Android推送服务 文章钢要: 对 ...
随机推荐
- [APIO2012]派遣 可并堆
Background 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿. Description 在这个帮派里,有一名忍者被称之为Master.除了Master以外,每名忍者 ...
- 操作CLOB数据——oracle
DECLARE V_UPDATE CLOB := '{"cpc_msg_tel":"15098025316","cvm_money":&qu ...
- (二)requests模块
一 requests模块 概念: python中原生的基于网络请求的模块,模拟浏览器进行请求发送,获取页面数据 安装: pip install requests 二 requests使用的步骤 1 指 ...
- js 工厂设计模式
class Product{ constructor(name){ this.name = name; } init(){ alert(this.name); } } function Creator ...
- QThread创建多线程程序
最近在阅读Qt 5.9 C++开发指南,为了加深对书本上内容的理解,参照书上的讲解尝试写了一些demo,用于以后工作中查阅,如果涉及侵权请告知,实例程序samp13_1 mythread.h #ifn ...
- C++ 管道
// PipeServer.cpp : Defines the entry point for the console application. // #include "stdafx.h& ...
- arm安装cuda9.0,tensorflow-gpu, jetson tx2安装Jetpack踩坑合集
因为要在arm(aarch64)架构的linux环境中安装tensorflow-gpu,但是官方tf网上没有对应的版本,所以我们找了好久,找到一个其他人编译好的tensorflow on arm的gi ...
- Vue.js(19)之 封装calendar组件
效果 需求 1.实现一个日历组件,如图: 2.显示某天的事项: 3.事项是模拟父组件请求接口返回的,数据格式如下: [ { id: '232', date: '2019-06-01', info: ' ...
- windows FTP上传
TCHAR tcFileName[MAX_PATH * 4] = {L"visio2010永久安装密钥.txt"}; TCHAR tcName[MAX_PATH * 4] = {0 ...
- Git--git log
参考 https://www.cnblogs.com/bellkosmos/p/5923439.html https://www.cnblogs.com/mkl34367803/p/9219913.h ...