第十章:对象和类

来源:互联网 发布:java包的命名规范 编辑:程序博客网 时间:2024/05/29 12:39

面向对象是一种编程风格,用于任何一种语言。

OPP特性:

  • 抽象
  • 封装和数据隐藏
  • 继承
  • 多态
  • 代码的可重用性
过程性编程

考虑遵循的步骤,用户希望有哪些功能,我如何提供,如何存储数据。

面向对象编程

首先考虑用户,确定一个对象的属性和操作这些属性的方法。用户接口有哪些。

抽象—-》类

相当于自己定制的一个新的类型,这个类型的属性和可以对这些属性进行的操作
接口就是将人的意图转换为存储在计算机中的具体信息。

类的组成:

  1. 类声明:数据成员和成员函数
  2. 类方法定义:描述如何实现类成员函数。
    通常,将类定义放在头文件中(头文件中可以实现对函数的定义:内联方法),将方法实现放在源文件中。

类的访问控制:

  • private:只能通过公共函数访问
  • public,
  • protected

类的封装和数据隐藏

  1. 数据放在私有部分
  2. 实现(函数)放在私有部分
  3. 类函数的定义和类声明放在不同的文件中。

结构的默认访问类型是public
类的默认访问类型是private

类的成员函数

  1. 类函数的定义:类名::方法名
  2. 定义放在类声明中的函数自动成为内联函数。
  3. 类声明之外定义的成员函数,在函数头最前面使用:inline关键字使其成为内联函数。
  4. 内联函数的规则是每个使用他们的文件中都对其进行定义。
  5. 构造函数:无返回值,函数名就是类名
    参数名不能是数据成员名
  6. 不提供构造函数时,默认的构造函数:Stock::Stock() {}
  7. 应提供默认的构造函数,而且构造函数应该提供初始值。
  8. 析构函数:无返回值,函数名就是~类名
  9. 使用构造函数:
Stock food = Stock("adf", 1, 2);//显式调用Stock food("adf", 1, 2);//隐式调用

局部变量放在栈中,先创建的变量后删除

对象的初期化,初始化赋值的方式效率高

只要类方法不修改调用对象,就应将其声明为const

自己提供的构造函数可以不提供参数,要提供就提供所有参数
构造函数可以重载,但析构函数只能有一个。
如果构造函数使用了new,则必须提供使用delete的析构函数

类方法将调用他的对象的地址设置为this指针

如果要创建对象数组必须要有默认构造函数:没有任何参数的构造函数或有默认参数的构造函数。

类中声明常量

  1. const int Months = 12; //失败,声明类只是描述变量的形式,没有创建对象
  2. enum {Months = 12}; //成功,定义的枚举量只是一个符号常量,不属于任何对象
  3. static const int Months = 12; //成功,不是存储在对象中,被所有的对象共享

C11枚举的作用域是类:

enum egg{Small, Large};
enum t_shirt{Small, Large, Xlarge}; C98编译出错

enum class egg{Small, Large};
enum class t_shirt{Small, Large, Xlarge};

enum struct egg{Small, Large};
enum struct t_shirt{Small, Large, Xlarge};
egg::Large
t_shirt::Large

作用域内枚举不能隐式的进行类型转换,可以显式的进行类型转换。
C11指定枚举的底层类型:enum class::short pizza{Small, Medium};

引用既是别名,执行相同的内存空间

原创粉丝点击