分类标签归档:C++

关于面向对象


介绍

面向对象的基本特征:封装,继承,多态

封装

将成员的属性和实现过程设置为私有,仅透过对外暴露接口函数,数据隐藏封装在内部,同时来说将函数定义和类声明放在不同的文件也是一种封装。总的来说封装就是把客观事物封装成抽象类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的信息进行隐藏,默认是private;可以拥有的权限有:public,protected,private;

  1. public 成员:任意实体都可以访问 。
  2. protected成员:子类和本类成员函数都可以访问。
  3. private 成员: 只允许本类的成员函数,友元类或友元函数访问。

继承

  1. 如果一个类是由另外一个继

Read more

C++ 与C , const 关键字


本文用的是docker C++镜像 twoixter/gcc48-dev:latest

C++ 与C 有什么不同

很多人认为 C++是C 的超集,可以通过extern C 来处理C++ 与C的函数接口,实现C++ 调用C函数,从某种程度上来说,C++是在C语言基础上 进行拓展和改进,所有合法的C程序都是合法的C++程序。但是个人还是认为他们是两种语言。 1. 面向对象: C++是一种面向对象的语言,支持类,对象,继承,多态等面向对象编程的特性,C语言面向过程语言,没有直接面向对象编程。

  1. 标准库: C++提供了一个丰富的标准库,包括:容器,算法,输入输出,字符串处理,异常处理等功能,C

Read more

关于函数指针


函数指针

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

一般形式

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