手记

C++学习笔记一

对象和类

  1. 面向对象编程(OOP)特性

  • 抽象

  • 封装和数据隐藏

  • 多态

  • 继承

  • 代码的可重用性

  1. 访问控制

  • private, protected, public

  • class 声明默认为 private, struct声明默认为public

  • 为了更具可读性,建议显式的说明访问权限

  1. 实现类成员函数

  • 定义类成员函数时,使用作用域解析运算符(::)来标识函数所属的类

  • 类方法可以访问类的private组件

  • 不属于公共接口的成员函数声明为private

  1. 内联方法

  • 定义于类声明中的函数自动内联

  • 类声明常将短小的成员方法定义为内联的

  • 使用inline限定符可将类外定义的方法变成内敛方法

  • 根据改写规则(rewrite rule),在类声明中定义方法等同于用原型替换方法定义,然后在类声明的后面将定义改写为内联函数

  • 内联函数的特殊规则要求在每个使用它的文件中都对其定义,最简便的方法是将内联定义放在定义类的头文件中

  1. 使用类

  • 声明类变量或new创建一对象

  • 声明类变量时下面的方法是不对的

Test t1(); // 注意这不是表示使用默认构造函数,而是声明了一个函数原型
  • 正确的写法

Test t1;Test t2(10);
Test* t3 = new Test();
  1. 构造函数和析构函数

  • 使用构造函数

Point p1 = Point(1, 2); //显式调用Point p2(3, 4); //隐式调用Point* p3 = Point(5, 6); //结合new运算符调用
  • 默认构造函数:在未提供显式初始值时,用来创建对象的构造函数

Point p; //默认构造函数隐式版本

如果没有提供任何构造函数,则C++会提供默认构造函数,拷贝构造函数转移构造函数
如果定义了构造函数,建议同时提供默认构造函数
两种方法定义默认构造函数:

  • 给所有参数提供默认值

  • 重载一个没有参数的构造函数

  • 注意:

  • 构造函数大部分情况声明为public

  • 构造函数可以重载

  • 构造函数不能声明为虚函数

  • 析构函数

如果创建的是静态存储类对象,则其析构函数在程序结束时自动被调用
如果创建的是自动存储类对象,则其析构函数在程序执行完代码块时自动被调用
如果是new创建的对象,将驻留在堆区中

  1. const成员函数

cosnt Point p = Point(1, 2);
p.show(); //如果show方法为非const方法,编译器将拒绝执行该语句

对于有参数的方法可以通过将参数声明为const引用或指向const的指针解决
对于没有参数的方法,将const放在方法圆括号的后面

void show() const;void Point::show() cosnt {}
  1. 对象数组

调用默认构造函数

Point points[5];

调用构造函数初始化

Point points[2] = {
    Point(1, 2),
    Point()
};
  1. 作用域内枚举

  • C++11提供了一种新枚举,其枚举常量的作用域为类(为了避免不同枚举明明冲突)

enum class egg {SMALL, MEDIUM, LARGE, JUMBO};enum class t_shirt {SMALL, MEDIUM, LARGE, XLARGE};

使用时需要用枚举名来限定枚举量c

egg choice = egg::SMALL;
t_shirt size = t_shirt::SMALL;
  • C++11作用域内枚举底层类型为int

  • 可用如下方法将底层类型设为short, 底层类型必须为整型

enum class : short egg {SMALL, MEDIUM, LARGE, JUMBO};
  1. 小结

面向对象编程强调的是程序如何表示数据. 使用OOP方法解决问题的第一步是根据它与程序之间的接口来描述数据,从而指定如何使用数据, 然后设计一个类实现接口. 一般来说, 私有数据成员存储信息, 公有成员方法提供访问数据的唯一途径. 类将数据和方法组合成一个单元, 其私有性实现数据隐藏.



作者:HYIndex
链接:https://www.jianshu.com/p/952c2e7df449


0人推荐
随时随地看视频
慕课网APP