[关闭]
@songying 2019-01-28T13:25:50.000000Z 字数 2380 阅读 1307

c++ 面向对象

c++


类与对象

1. 类定义

  1. class class_name{
  2. // 各个成员声明或定义
  3. }

类的所有的成员都必须在类的内部声明

我们有时也可以使用struct来创建类,而使用class 与struct 定义类的唯一区别就是默认的访问权限, struct中,默认所有访问权限是public, 而 class 中默认访问权限是private。

2. 类成员函数

成员函数可以定义在类内也可以定义在类外。

  1. // 定义在类内
  2. class class_name{
  3. type func_name(type){
  4. // 成员函数内容
  5. }
  6. }
  7. // 采用范围解析运算符 :: 定义在类外
  8. type class_name::func_name(type){
  9. // 成员函数内容
  10. }

3. 类访问修饰符

默认情况下类的成员都是private的

修饰符 说明
public 成员变量或函数在程序类的外部是可访问的。我们常用public来定义类的接口。
private 成员变量或函数在类外部是不可访问的,只有类和友元函数可以访问私有成员,子类也不可访问。我们常用private封装类的实现细节。
protected 成员变量或函数在子类中是可以访问的,外部的其余类不能访问
继承方式 说明
public继承 成员的访问属性不发生变化
protected继承 public成员的属性变为protected, 其余成员属性不变
private 继承 所有成员属性变为private

4. 构造函数

构造函数是类的一种特殊成员函数,其在每次创建类的新对象时执行。

  1. class class_name{
  2. public:
  3. class_name(type val);
  4. }

5. 析构函数

析构函数在每次删除所创建的对象时执行。

  1. class class_name{
  2. public:
  3. ~class_name();
  4. }

6. 拷贝构造函数

拷贝构造函数使得你在创建对象时,能够以同一类中之前创建的对象来初始化新创建的对象。

  1. class class_name{
  2. public:
  3. class_name (const class_name &obj);
  4. }

7. 友元函数与友元类

友元函数不是类的成员函数,其定义在类的外部,但可以访问类的所有私有成员和保护成员。

  1. class class_name{
  2. public:
  3. friend type func_name(type val);
  4. // friend class class_name; // 友元类

8. 内联函数

9. this 指针

  1. this->member;

10. 指向类的指针

  1. class_name *ptr;
  2. ptr->member; //访问成员

11. 类静态成员

继承

  1. class 子类名 : 访问修饰符 父类名{
  2. }

多继承

  1. class 子类名:访问修饰符 父类名,访问修饰符 父类名,… {
  2. };

重载运算符和重载函数

重载是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和实现不相同。

1. 函数重载

同一个作用域中,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。

  1. class class_name{
  2. public:
  3. type func_name(type val){
  4. }
  5. type func_name(type val){
  6. }
  7. }

运算符重载

  1. class class_name{
  2. public:
  3. type operator+(type val);

多态

多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。

1. 虚函数

在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。

  1. class class_name{
  2. public:
  3. virtual type func_name(); // =0,就表示是纯虚函数
  4. }

抽象类

  1. class class_name{
  2. public:
  3. virtual type func_name() = 0; // =0,就表示是纯虚函数
  4. }

设计策略建议

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注