卡码网语言基础课 | 21.图形的面积

C++——类和面向对象

1.什么是类?

总的来说,类是抽象(人),对象是实例(张三)。C++中用class定义类,在类中定义成员变量和成员方法。

2.封装

在了解什么是封装前,首先需要知道访问修饰符。访问修饰符指定了成员变量和成员方法的可见性和访问权限,包括:

public(公有):类的内部、派生类(子类)的内部、类的对象外部都可以访问

private(私有):只能在定义该成员的类的内部访

protected(受保护):只能在定义该成员的类的内部、派生类汇总访问

在代码中,可以通过封装隐藏对象中一些不希望被外部所访问到的属性或方法,具体的做法是:

  • 将对象的属性名,设置为private,只能被类所访问
  • 提供公共的getset方法来获取和设置对象的属性

3.构造函数

在之前链表中已经使用过构造函数,用来初始化对象的成员变量。构造函数与类同名,没有返回类型,在对象创建时自动调用。

构造函数的基本语法包括:

  • 函数名:与类名相同
  • 参数列表:用于在创建对象时传递初始化信息,可以有0个或多个
  • 函数体:用于执行构造函数的初始化逻辑
//带参数的构造函数
Person(int personAge, const string& personName) {
   age = personAge;
   name = personName
  }

此外还有构造函数的成员初始化列表写法,这种写法允许在进入构造函数主体之前对类成员进行初始化。

Person(int personAge, const string& personName) : age(personAge), name(personName) {
    
}

4.继承

为了避免编写重复性的代码,可以采用“继承”的方式使得一个类获取到其他类中的属性和方法。在定义类时,可以在类名后指定当前类的父类, 子类可以直接继承父类中的所有属性和方法。在子类中需要对父类定义的方法进行重写,重写通过关键字override实现。

5.多态

多态允许不同的对象使用相同的接口进行操作,但在运行时表现出不同的行为。C++中实现多态性的方法是通过virtual虚函数。

class Shape {
public:
    //定义虚函数
    //const = 0 表示纯虚函数,该类不能被实例化,要求派生类必须实现这两个函数
    virtual double CalculateArea() const = 0;
    virtual string GetType() const = 0;
};

class Rectangle : public Shape{
private:
    int width;
    int height;

public:
    Rectangle(int width , int height) :width(width) , height(height) {}
    double CalculateArea() const override{
        return static_cast<double>(width * height);
    }
    string GetType() const override{
        return "Rectangle";
    }
};

class Circle : public Shape{
private:
    int radius;

public:
    Circle(int radius) : radius(radius) {}

    double CalculateArea() const override{
        return 3.14*radius*radius;
    }
    string GetType() const override{
        return "Circle";
    }

};

顺便总结一下之前学习中的疑问,有一些还需要继续加深理解。

1. ->操作符的作用:通过指针访问所指向对象的成员。指针—钥匙,对象—房间,成员—房间内的物品,因此->的过程就像用钥匙打开房间并取出里面的物品。

eg.之前在链表中:

//插入新节点
ListNode *newNode = new ListNode(val);
cur -> next = newNode;
cur = cur -> next;

指针cur最开始为虚拟头节点,它指向第一个链表节点。因此cur -> next访问了第一个链表节点中的next成员,并将它指向新节点。

2.const的作用

声明常量: const int a = 10; //a的值不能更改

限定只读:const Shape* p:p指向的Shape对象不能通过p修改

     Shape* const p:p本身不能改(但p指向的对象可以改)

3.&表示引用

引用 = 已有变量的别名,两者指向同一内存。好处:避免直接复制数据,直接操作原对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值