先背单词:

  • Object-Oriented Programming (OOP) 面向对象编程

  • Abstraction [æb'strækʃən] (抽象)

  • Polymorphism [ˌpɒlɪ'mɔ:fɪzəm] (多态)

  • Inheritance [ɪn'herɪt (ə) ns] (继承)

  • Encapsulation [ɛnˈkæpsəˌleɪʃən] (封装)

因为显得很牛逼

#

构成:

  • 由变量定义的数据域
  • 由函数定义的行为
    • 两类特殊函数:构造函数 (ctor),析构函数 (dtor)

类是一种数据类型,几乎取代 C 中的 struct

不同:默认访问属性,struct 为 public,class 为 private

# 构造函数 ctor

声明在类中的构造函数,特点:

  • 创建对象时自动调用
  • 与类同名
  • 无返回值(void 也不带)
  • 可重载

不声明构造函数时,编译器会自动创建一个无参的空函数体 “默认构造函数”。

C++11 中这样强制编译器生成默认构造函数:

类名() = default;

单参数的构造函数可能实现隐式类型转换。

# 对象

创建时时推荐使用 C++11 列表初始化便于进行窄化检查。

通过对象访问运算符 . 访问对象中的数据和函数。

对象的数据成员称实例变量,函数成员称实例函数

实例:

#include <iostream>
using namespace std;
class Circle
{
public:
    double r;
    Circle() // ctor
    {
        r = 1.0;
    }
    Circle(double radius) //ctor 重载
    {
        r = radius;
    }
    /* 等价写法 1
    Circle (double radius = 1.0)
    {
        r = radius;
    }
    */
    /* 等价写法 2
    double r = 1.0;
    Circle () = default;
    Circle (double r)
    {
    	this -> r = r;
    }
    */
    double area()
    {
        return r * r * 3.14;
    }
};
int main()
{
    Circle c1;
    Circle c2{2.0};
    cout << c1.area() << ' ' << c2.area() << endl; // 3.14 12.56
    return 0;
}

# 对象拷贝和匿名对象和类的蜜汁定义

# 对象拷贝

​ 默认情况下,对象拷贝时,每个数据域都会被拷贝。

# 匿名对象

​ 一次性使用的对象。无法找回

例如:

auto c = Circle{2.33};
----
Circle c2{};
c2 = Circle{2.33};
----
cout << Circle{2.33}.area() << endl;

# 局部类

​ 在函数中声明的类,作用域仅该函数内。

# 嵌套类

​ 类中声明类,C++ 不常用,jvav 你会吗?

# 类声明与定义分离

内联:函数在 类声明 中 实现,则自动成为内联函数。

二元作用域解析运算符: :: ,简称 “域分隔符”

实例:

#include <iostream>
class Circle
{
    double r;
public:
    Circle();
    Circle(double radius);
    double area();
};
Circle::Circle()
{
    r = 1.0;
}
Circle::Circle(double radius)
{
    r = radius;
}
double Circle::area()
{
    return 3.14 * r * r;
}
int main()
{
    Circle c1;
    Circle c2{2.0};
    std::cout << c1.area() << ' ' << c2.area() << endl;
    return 0;
}

多文件鸽了,,以后有机会也不会来补坑。咱太菜了 QAQ

# 对象指针相关

# 动态对象创建

好像没什么新鲜的。

没有对象?自己 new 一个。

# 对象数组

也没啥新鲜的,声明数组时不要使用 auto

实例:

#include <iostream>
using namespace std;
class Circle
{
public:
    double r;
    Circle(double radius = 1.0)
    {
        r = radius;
    }
    double area()
    {
        return r * r * 3.14;
    }
};
int main()
{
    Circle* ptr = new Circle{2.0};
    cout << (*ptr).area() << endl; //. 优先级高于 *
    cout << ptr -> area() << endl;
    auto cptr = new Circle[3]
更新于