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:下溢错误在浮点数计算中
    • bad_alloc异常和new:对于使用new时可能出现的内存分配问题
      • 一:返回一个空指针
      • 二:引发bad_alloc异常

2. STL

随意摘取
1. 空间的配置与释放,std::alloc(

3.面向对象程序设计OOP

三个基本概念:数据抽象、继承和动态绑定
- 数据抽象:将类的接口与实现分离
- 继承:定义相似的类型并对其相似关系建模
- 动态绑定:在一定程度上忽略相似类型的区别
- 当使用基类的引用(或指针)调用一个虚函数时将发生动态绑定。
- 多态:引用或指针的静态类型与动态类型不同正是C++语言支持多态性的根本所在。
- 隐藏:
- 举例:
名字查找先于类型查找
- struct与class的区别:唯一区别就是默认的访问权限,class为私有,struct为共有。

0 0
原创粉丝点击