【Cpp】类和对象

一、关于类

对象是类的实例(instance),类是一个概念,实例是具体的、具有内存的。

两个关系:has a、is a
has a

包含关系,例如公司有一个程序员。

聚合:主体消亡时,各组件可继续存在。公司破产,程序员给别的老板打工。

组合:主体消亡时,组成组体的各部分也消亡。程序员离开公司时,桌上的书、地上的拖鞋,一起也要离开公司。

is a

继承关系 inheriting,又叫派生(deriving)、扩展(extending)。通用功能放入基类(base),子类(subclass)可以扩展基类,子类也可改写基类行为

好的层次结构
  • 类之间存在有意义的功能联系
  • 共同的功能放入基类,从而支持代码重用
  • 避免子类过多地重写父类的功能,除非父类是一个抽象类 —— C++20高级编程
多重继承

一个类可以有多个基类。多重继承会破坏清晰的层次结构,且实现复杂。不推荐使用。

抽象基类
多态 polymorphism

遵循一套标准属性和方法的对象可以互换使用。能最大利用继承的优势。比如,公司只告诉员工9点上班,而不用关心某个员工具体是怎么上班(打车、开车、地铁....)

二、类的结构、组成

构造函数

析构函数

1、类的定义
// 简单版本:类比 int cat;
class Cat{};


// 中等版本
class Cat {
public: // UML中 + 表示
    公有成员
private: // UML中 - 表示
    私有成员
protected:// UML中 # 表示
    保护成员 —— 于继承相关
};

以分号结尾

2、类的成员:
  • 成员函数—— 相对应的普通函数
  • 成员变量
  • 成员枚举
  • 类型别名
  • 嵌套类

建议—— 初始化类内的数据成员(类成员初始化器)

声明与定义的区别?
  • 声明指明方法原型
  • 定义指明方法实现
成员函数定义放类内还是类外?
class 定义放.h 还是放.cpp?
this 指针
3、static、const、virtual、override
4、访问控制

出于隐藏信息的目的,数据成员放private;接口函数(围绕数据成员设置)放public;

同一类域内,类域贯穿,可以忽略掉public、protected、private,他们是给外面看的。类内的成员、函数,相互之间都可以访问。如:成员函数Cat::funcA调用另一个成员函数Cat::funcB给成员变量Cat::catNum赋值(Cat:: 表示他们都是类Cat内的成员)

5、与struct 相比,class 默认都是private,struct 默认是public;

其他方面cpp内部,二者使用方式几乎无差异

struct Cat {
    int catNum; // public
};

class Cat {
    int catNum; // private
};

private、public、protected 可以出现多次,顺序也没要求。但尽量规整放在一起

4、。

Lsp Liskov Substitution Principle 里氏替换原则:在不改变行为的情况下,用派生类替代基类。

参考:

1、C++20高级编程

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值