关于函数指针


函数指针

函数指针是指向函数的指针变量,可以将函数作为参数传递给其他函数,也可以在程序中动态选择调用不同的函数。

一般形式

typedef int (*FunctionPtr)(int, int);//定义一个函数指针类型
FunctionPtr ptr;//声明一个函数指针变量
int add(int a, int b)
{
    return a+b;
}
ptr = add; // 直接使用函数名赋值
ptr = &add; //使用地址赋值

使用场景

  1. 将函数作为参数传递给其他函数
void doOperation(int a, int b, FunctionPtr o

Read more

关于类,对象以及成员的内存分布,友元关系


关于类,对象和成员的内存分布

介绍

c++ 程序的内存格局分为4个区,全局数据区,代码区,栈区,堆区,全局数据区存放全局变量,静态数据和常量。所有类成员函数和非成员函数代码存在代码区,为运行函数分配的局部变量,函数参数,返回数据,返回地址等存放在栈区,余下的空间都被称为堆区。

对象是类的实例

c++ 程序的内存格局分为4个区,全局数据区,代码区,栈区,堆区,全局数据区存放全局变量,静态数据和常量。所有类成员函数和非成员函数代码存在代码区,为运行函数分配的局部变量,函数参数,返回数据,返回地址等存放在栈区,余下的空间都被称为堆区。

对象的存储大小

  1. 如果有虚函数,则多一个vptr指针
  2. 如果有虚基

Read more

关于C++中的虚函数,虚继承和虚基类


虚函数机制

  1. 虚函数简单来说,就是在基类成员函数名字前面加上virtual关键字,通过派生类重写函数来实现,纯虚函数就是只有虚函数声明,没有具体定义,任何派生类都需要定义自己的实现方法。
  2. 特别注意的是virtual关键字只能修饰类中成员函数,不能修饰类外函数定义,纯虚函数的声明方式就是在虚函数原型后加“=0”。
  3. 基类中的虚函数,如果有定义,哪怕是空定义,它的作用就是让这个函数能够在子类里面被重写,这样的话,编译器后期绑定实现多态,纯虚函数只是一个接口,具体的要在子类中实现。
  4. 要注意的是,虚函数可以在子类中不重写,但是虚函数一定要在子类中实现才能实例化子类。虚函数的类是为了实现继承,继承接口也继

Read more

C++中的class ,struct,union


三者异同

class和struct没有什么区别,都可以包含成员函数,可以继承,可以实现多态等等,不同之处如下:

 class 默认是private struct 默认是public
 class 继承后,默认成员访问是private,struct 继承也是public
 如果定义了构造函数,二者都不能使用大括号进行初始化,如果没有构造函数,struct可以用{}初始化,class 只有当所有成员都是public的时候才能使用{}进行初始化。
 C和 C++中的union: 
    一种数据结构,在C中是一个结构体,在C++中是一个类,可以有访问权限,成员函数,成员变量,构造和析构。
    

Read more

::范围解析运算符和 namespace


::范围解析运算符

  1. ::可以作为全局作用域符。用于类型名称前,如在程序中的某一处你想调用全局变量a,那么就写成::a;(也可以是全局函数)
  2. 类作用域符: 用于表示指定类型的作用域范围是具体某个类,如果想调用class A中的成员变量a,那么就写成A::a;
  3. 命名空间作用域符:用于表示指定类型的作用域范围是具体某个命名空间。如std::cout

namespace命名空间

介绍

命名空间是定义一种新的声明区域来创建命名的名称空间。

用途

这样目的之一是提供一个声明名称的区域,一个名称空间中的名称不会另一个名称空间的相同名称发生冲突,同时允许程序的其他部分使用该名称空间中的东西

使用using

Read more