---页首---

C++ 类

C++类

  • C++中可以使用struct、class来定义一个类
  • struct、class的区别
    • struct的默认成员权限是public
    • class的默认成员权限是private
// 类的定义
struct Person{
	// 成员变量
	int m_age;
	// 成员函数
	void display(){
		cout << "display()" << endl;
	}
};
class Person{
public:
	// 成员变量
	int m_age;
	// 成员函数
	void display(){
		cout << "display()" << endl;
	}
};

C++一般命名规范

  • 全局变量:g_
  • 成员变量:m_
  • 静态变量:s_
  • 常量 :c_
  • 使用驼峰标识

this

  • this是指向当前对象的指针,对象在调用成员函数的时候,会自动传入当前对象的内存地址
  • 因为this是指针,访问成员变量时用 ->

C++ 对象初始化

  • 前言:内存空间的布局,一般都有以下几个大区域
    • 代码段(代码区):用于存放代码
    • 数据段(全局区):用于存放全局变量
    • 栈空间:每调用一个函数会给它分配一段连续的栈空间,等函数调用完毕后会自动回收这段栈空间;自动分配和回收
    • 堆空间:需要主动申请和释放
  • 堆空间的初始化
    int *p1 = new int;			// 未被初始化
    int *p2 = new int();		// 初始化0
    int *p3 = new int(5);		// 初始化为5
    int *p4 = new int[3];		// 数组元素未被初始化
    int *p5 = new int[3]();		// 3个数组元素都被初始化0
    int *p6 = new int[3]{};		// 3个数组元素都被初始化0
    int *p7 = new int[3]{5};	// 数组首元素被初始化为5, 其它数组元素都被初始化0
    
  • 对象的内存可以存在于3个地方
    • 全局段(数据段):全局变量
    • 栈空间:函数里面的局部变量
    • 堆空间:动态申请内存(malloc、new等)

构造函数

  • 也叫构造器,在对象创建的时候自动调用,一般用完成对象的初始化工作
  • 特点
    • 函数名与类名同名,无返回值(void)都不用写,可以有参数,可以重载,可以有多个构造函数
    • 一旦自定义了构造函数,必须用其中一个自定义的构造函数来初始化对象
    • 通过malloc分配的对象不会调用构造函数
  • 父类构造函数的调用
    • 子类的构造函数默认会调用父类的无参构造函数
    • 如果子类的构造函数显示的调用父类的有参构造函数,就不会再去默认调用父类的无参构造函数
    • 如果父类缺少无参构造函数,子类的构造函数必须显示调用父类的有参的构造函数

析构函数

  • 也叫析构器,在对象销毁的时候自动调用,一般用于完成对象的清理工作
  • 特点
    • 函数名以~开头,无返回值(void)都不能写,无参,不可以重载,有且只有一个析构函数
  • 注意
    • 通过malloc分配的对象free的时候不会调用析构函数
    • 构造和析构函数都要声明为public,才能被外界使用
    int *p1 = new int();
    delete p1;
    int *p1[] = new int[3]{};
    delete[] p1;
    

初始化列表

  • 一种便捷的初始成员变量的方式
  • 只能用在构造函数中
  • 初始化顺序只跟成员变量的声明顺序有关
  • 如果函数声明和实现是分离的
  • 初始化列表只能写在函数的实现中
  • 默认参数只能写在函数的声明中
  • 构造函数间的调用只能在初始化列表中

命名空间

  • 命名空间可以用来避免命名冲突
  • 命名空间可以嵌套,C++有个默认的全局命名空间,自定义的命名空间默认嵌套在它里面

类的继承及访问权限

  • 成员访问权限、继承方式有3种

    • public公共的,任何地方都可以访问(struct默认)
    • protected当前类内部和子类内部可以访问
    • private私有的,只有当前类内部可以访问(class默认)
  • 子类内部访问父类成员变量的权限,取以下2项中权限最小的那个

    • 成员本身的访问权限
    • 继承父类的继承方式
    • 一般开发中继承方式用public,这样能保留父类的成员访问权限
    • 访问权限不影响内存布局
  • 成员变量的内存布局

    • 父类成员变量在前,子类成员变量在后
posted @ 2019-07-31 14:04  20190311  阅读(167)  评论(0编辑  收藏  举报
---页脚---