c/c++ c++类_类的实例_数据成员_成员函数_构造/析构函数的概念

类与类的实例

1: c++是基于C的面向对象的扩展,C的语法,C++都支持;
2: 一个代码要用C++的编译器编译,在VS里面把它制定为.cpp后缀名或.cc后缀名;

2: 定义一个类,也是一种新的数据类型;
class 类的名字 {
成员数据部分
成员函数部分;
};

3: 实例化一个类
类名 实例; // 定义这种类型的变量,这个变量就是类的实例;

4: 变量定义在哪里,内存就分配到哪里;


类的定义

  • c语言的 struct结构体 根据我们数据对象的复杂性,定义的一个可以看作整体的数据类型;
  • c++语言的 class 类名 {}; 对于语法来说,多了一种数据类型,这种类型就是类的名字;和结构体有点类似
    • c/c++ c++类_类的实例_数据成员_成员函数_构造/析构函数的概念
  • 实例化一个类,都需要内存的;
  • 类的实例的内存:
    • 变量定义在哪里,类的实例的内存就分配在哪里;
    • 定义在函数内部的局部变量,类的实例的内存分配在栈上的
    • c/c++ c++类_类的实例_数据成员_成员函数_构造/析构函数的概念

类的成员

1: 定义一个类的数据成员(成员变量):
权限:
数据类型 成员名字;
2: 权限:
private(私有): 只能在内部访问,外部和子类都不可以访问;
public(共有): 可以在外部访问和使用,所有的都可以直接使用;
protected(保护): 内部访问+允许这个类的子类来访问(继承的时候详细讲解) + 外部不能访问;
如果不写任何权限默认是为私有的;

3: 定义一个成员函数:
权限 返回值 函数名字(参数);
4: 实现一个类的成员函数:
返回值 类::函数名字(参数) {
函数体;
}
5: 如果类要给别人使用,类定义放到头文件,实现细节放到.cpp/.cc文件;


类的成员变量/数据成员的定义

  • 类的成员变量
    • c/c++ c++类_类的实例_数据成员_成员函数_构造/析构函数的概念
  • 权限:数据类型,成员的名字;(与class对齐)
  • 权限的类型:
    • public 共有权限:允许在类的外部和内部同时可以访问;
    • private 私有权限 只允许类的内部访问而不允许外部访问;
    • protected 保护权限 只允许类和类的子类访问 (继承的时候讲解)
    • 如果不写权限默认是私有的
    • c/c++ c++类_类的实例_数据成员_成员函数_构造/析构函数的概念

类的成员函数定义

  • 权限
    • 返回值 函数名字(函数的参数) {直接实现函数体};
      • c/c++ c++类_类的实例_数据成员_成员函数_构造/析构函数的概念
    • 返回值 函数名字(函数的参数);不直接实现
      • c/c++ c++类_类的实例_数据成员_成员函数_构造/析构函数的概念
  • 作用域:类名::属于这个类的范围
    • c/c++ c++类_类的实例_数据成员_成员函数_构造/析构函数的概念
    • 通常意义下,类的声明会定义在头文件里面,给用户使用;
      • c/c++ c++类_类的实例_数据成员_成员函数_构造/析构函数的概念
    • 类的实现,会定义在.cpp,文件里面,隐藏实现细节;
      • c/c++ c++类_类的实例_数据成员_成员函数_构造/析构函数的概念

类的成员访问

1: 类的实例.数据成员: 访问类的实例的数据成员;
2: 类的实例.成员函数: 调用类的函数;
3: 类的实例的指针->数据成员: 访问类的实例的数据成员;
4: 类的实例的指针->成员函数: 调用类的函数;


  • 回顾c语言 结构体变量使用.成员,来访问,类的变量也使用.来访问;
    • 不在类的作用域范围内访问,都叫做外部访问;
    • c/c++ c++类_类的实例_数据成员_成员函数_构造/析构函数的概念
    • 类的内部访问
      • c/c++ c++类_类的实例_数据成员_成员函数_构造/析构函数的概念

类的实例指针访问数据成员和成员函数

c/c++ c++类_类的实例_数据成员_成员函数_构造/析构函数的概念


构造/析构函数

1: 没有返回值;
2: 函数的名字和类名字一样;
3: 析构函数~函数名字(和类名一样)
4: 构造函数: 构造实例的时候调用, 可以做类的实例的初始化;
5: 析构函数: 销毁实例的的时候调用, 可以在这里释放类的实例所占资源;
6: 不定义,就用默认的(什么事情也不干);
7: 构造函数有权限,如果权限不够,也无法实例化对象;


  • 构造函数:实例化这个对象的时候会自动调用的函数;
  • 析构函数:回收这个实例的时候会自动调用的函数;
  • 这个机制的好处,引入构造和析构机制给了对象实例化的时候一个初始的机会,和一个不用了释放资源的机会;
  • 构造函数的特点:1.没有返回值;2.和类同名;
  • 析构函数的特点:1.没有返回值;2.(~)和类同名;
    • c/c++ c++类_类的实例_数据成员_成员函数_构造/析构函数的概念
    • 也可以在外部使用
    • c/c++ c++类_类的实例_数据成员_成员函数_构造/析构函数的概念

    • c/c++ c++类_类的实例_数据成员_成员函数_构造/析构函数的概念
  • c/c++ c++类_类的实例_数据成员_成员函数_构造/析构函数的概念

总结

1: 熟悉类的定义;
2: 熟悉访问权限;
3: 熟悉类的实例调用成员函数和访问成员变量;


–>源代码