C++语言
来源:互联网 发布:海阔淘宝客助手 编辑:程序博客网 时间:2024/06/15 00:32
1. 关键字
待更新…….
指针
- 指针变量
- 指针函数
- 函数指针
- void *指针
静态类型与动态类型
- 静态类型是在编译时就决定好的类型
- 动态类型是在内存中的类型,只有在运行时才会知道的类型
- 所以表达式既不是引用也不是指针,则它的动态类型永远与静态类型一直。
- 举例:
Bulk_quote bulk;Quote *itemP=&bulk;//正确:动态类型是Bulk_quoteBulk_quote *bulkP=itemP;//错误:不能将基类转换成派生类
final关键字:
- 不想类被其他类所继承- 函数被定义成final之后,任何尝试覆盖该函数的操作都是错误
override关键字:只能是在标有virtual的函数中使用
const用法
static关键字
- 如果static不是定义在类内,那么可以分一下集中情况讨论:
- 全局static:程序运行时一直存在,直到程序结束
- 局部static:程序运行时一直存在,直到程序结束
- 此时static的重要作用是“隐藏”:即标有static关键字的部分只在所指定的作用域内可见,比如单个文件内,单个函数内
- 如果在类内定义static成员或者static成员变量
- 只要标有static关键字,表示此部分被整个类对象共同所有,即各个对象中共享的部分。比如说,在银行的结算类中,想要定义一个利率的变量,不过随着利率变量被所有对象所共享,当有变化时,所有对象均变化,而不用再在每个实例中去设置新值。
- static成员变量可以供所有静态成员函数和非静态成员函数调用
- 但是静态成员函数只能调用静态成员变量
- 静态成员或者函数的调用方式,可以是直接对象调用或者用类作用域调用。
- 摘自C++Primer里面的解释
- 代码举例:
VS2010
#include "stdafx.h"#include <iostream>using namespace std;class Account{public: void calculate(){amount+=amount*interestRate;} static double rate(){return interestRate;} static void rate(double);private: std::string owner; double amount; static double interestRate; static double initRate();};int main(void){ double r; r=Account::rate(); Account ac1; Account *ac2=&ac1; r=ac1.rate(); r=ac2->rate(); return 0;}
类型声明方式
- typedef
- using
- deltype
- auto
virtual用法(加亮,一直很迷惑的部分)
- 基类通常都应该定义一个虚析构函数,即使该函数不执行任何实际操作也是如此。
- 一旦某个函数被声明成虚函数,则在所有派生类中它都是虚函数。
- 在含有纯虚函数的类中,这个类就是一个抽象类,不能创建抽象类的对象。
friends用法
- friend class:既不是is-a的共有继承关系,也不是has-a保护或私有继承的关系。友元类的所有方法都可以访问原始类的私有成员和保护成员。
- friend function: 如果只是将少数的成员函数作为其他类的友元函数,需要进行前向声明(forward declaration);而如果是友元类,则不需要前向声明。
- 使用友元的另一种情况是,函数需要访问两个类的私有数据。
inline用法
- 内联函数的链接性是内部的,就是说函数定义必须在使用函数的文件中。
- 很多直接在类中给出函数的实现方式的函数多为内联函数
volatile用法
union用法
多态机制
内存分配
继承
- 共有继、保护、私有继承
- 虚继承
- 继承类的构造:初始化列表顺序(基类构造函数,继承类成员声明顺序)
- 继承类的析构
- 防止继承的发生:final关键字
异常
- abort()程序异常终止
- 返回错误码
- 异常机制
- 引发异常:throw语句跳转到处理异常程序(如catch块),它类似于一个return 语句。
- 捕获有处理程序的异常:catch捕获异常
- 使用try块:try块标识特定的异常可能被激活的代码块,其后跟随一个或多个catch块。
- 堆栈解退 unwinding the stack
- 其他异常特性
- exception 类
- stdexcept异常类:
- logic_error:
- domain_error:超出定义域和值域
- invalid_argument:函数传递了一个意料外的值
- length_error:没有足够的空间来执行所需的操作
- out_of_bounds:指示索引错误
- runtime_error类
- range_error:计算结果可能不在函数允许的范围内,但是没有发生上溢或下溢错误
- overflow_error:上溢错误包括超出某种类型能够表示的最大数量级时
- underflow_error:下溢错误在浮点数计算中
- logic_error:
- bad_alloc异常和new:对于使用new时可能出现的内存分配问题
- 一:返回一个空指针
- 二:引发bad_alloc异常
- stdexcept异常类:
2. STL
随意摘取
1. 空间的配置与释放,std::alloc(
3.面向对象程序设计OOP
三个基本概念:数据抽象、继承和动态绑定
- 数据抽象:将类的接口与实现分离
- 继承:定义相似的类型并对其相似关系建模
- 动态绑定:在一定程度上忽略相似类型的区别
- 当使用基类的引用(或指针)调用一个虚函数时将发生动态绑定。
- 多态:引用或指针的静态类型与动态类型不同正是C++语言支持多态性的根本所在。
- 隐藏:
- 举例:
- struct与class的区别:唯一区别就是默认的访问权限,class为私有,struct为共有。
0 0
- C语言
- C语言
- C语言
- C语言
- C语言
- c语言
- C语言
- C语言
- C语言
- C语言
- c语言
- C语言
- C语言
- C语言
- c语言
- C语言
- c语言
- c语言
- jdbc连接mysql的方法
- getScrollx/getScrollY的理解
- 多线程状态下加载网络图片,以及取消子线程加载图片,开启线程的两种方式
- 什么是公有云和私有云
- 新学期,新起点,新计划;
- C++语言
- some frequently-used formula
- gitHub上传本地代码
- [BZOJ3879] SvT
- 4.redis分片
- 九度题目1434
- Leetcode283 Move Zeros
- 关于notepad++和gcc绑定
- jdbc连接oracle的方法