当前位置: 首页 > news >正文

[数据结构与算法·C++] 笔记 1.5类与对象

类与对象

类的概念

类的概念
类的定义

  • 一个东西满足这个类的特征 -> 这个东西是这个类的一个实例 -> 实例化
  • 共同特点(变量)->构成数据结构
  • 归纳行为(函数)->操作数据结构(抽象)
  • 可理解为在结构体中加入函数

类的定义

例题

  • 看上去像“带函数的结构体”
class Rectangle {
public:int w, h;int Area() {return w * h;}int Perimeter() {return 2 * (w + h);}void Init(int w_, int h_) {w = w_;h = h_;}
};

使用类

使用类
请添加图片描述

int main( ){int w,h;Rectangle r; // r 是一个对象cin >> w >> h;r.Init( w,h);cout << r.Area() << endl << r.Perimeter();return 0;
}

声明 定义分离

class Rectangle {public:int w, h;int Area(); // 成员函数声明int Perimeter();void Init(int w_, int h_);
};int Rectangle::Area() { return w * h; }
int Rectangle::Perimeter() { return 2 * (w + h); }
void Rectangle::Init(int w_, int h_) {this->w = w_;this->h = h_;
}
  • 两个 ’ : ’ 的意思: 定义成员函数

访问权限

请添加图片描述

class className {//私有属性和函数private://公有属性和函数public://保护属性和函数protected:}
  • 在类的成员函数内部,能够访问:
    • 当前对象的全部属性、函数;
    • 同类其它对象的全部属性、函数

默认函数–构造、析构、复制构造、赋值与取址

  • 每个物体都有诞生和消亡–构造函数与析构函数
public:cellphone();~cellphone();
  • 可以被复制
cellphone(const cellphone&);cellphone & operator = (const cellphone & );
  • 可以取地址
	cellphone *operator&();const cellphone*operator&()const;`
private:int electricity;

特殊成员–this指针

  • 并非对象的成员,是常量指针
  • 每个对象可以使用 this 指针访问自己的地址
  • 非 static 成员函数调用时,this 指针为隐式参数
  • 用途: 防止自赋值、返回以连续调用
class Complex {float real, imag;
public:Complex* ReturnAddress() {return this;}float ReturnReal() {return this->real; // 等效于 return real}
};

模板类

  • 函数模板
    • 实际问题中的需要: 对不同类型数据可用的排序函数 sort
    • 语法:
template<class T>//T 是任意类型return-type sort(...T...)
  • 一个实际的输出函数:
#include <iostream> // 包含必要的头文件template<class T>
void print(const T array[], int size) {for (int i = 0; i < size; i++) {std::cout << array[i] << " "; // 输出每个元素后加一个空格}std::cout << std::endl; // 在打印完所有元素后换行
}int main() {int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // 初始化数组print(a, 10); // 调用 print 函数打印数组return 0;
}
  • 类模板
    • 为了多快好省地定义出一批相似的类, 可以定义类模板, 然后由类模板生成不同的类
    • 数组是一种常见的数据类型,元素可以是
      • 整数
      • 字符串
    • 类模板的定义
#include <stdexcept> // 用于抛出异常template <class T>
class Carray {T *ptrElement;int size;public:Carray(int length) : size(length), ptrElement(nullptr) {if (length > 0) {ptrElement = new T[length];}}~Carray() {delete[] ptrElement;}int len() const {return size;}void setElement(T arg, int index) {if (index >= 0 && index < size) {ptrElement[index] = arg;} else {throw std::out_of_range("Index out of range");}}T getElement(int index) const {if (index >= 0 && index < size) {return ptrElement[index];} else {throw std::out_of_range("Index out of range");}}
};// 在这里提供成员函数的定义(如果它们在类模板外部)
// 注意:由于是模板,成员函数的定义通常放在头文件中
  • 使用类模板时必须声明对象
    Carray<int> arrayInt(50),*ptrArrayInt;
    • 创建元素类型为intCarray模板类,并声明该模板类的一个对象、以及一个指针。
    • 不同模板参数产生的模板类,不是同一个类

http://www.mrgr.cn/news/33288.html

相关文章:

  • 力扣之183.从不订购的客户
  • 软件测试APP测试过程中的关键步骤、工具使用及常见问题处理方法。
  • MySQL篇(事务 - 基础)
  • 【LLM】Ollama:本地大模型使用
  • 从编辑器到自动化脚本,提高编程效率的必备工具秘籍
  • 【C语言】const char*强制类型转换 (type cast)的告警问题
  • Qt 每日面试题 -2
  • react:React Hook函数
  • 华为OD机试真题-IPv4地址转换成整数-2024年OD统一考试(E卷)
  • 打开C嘎嘎的大门:你好,C嘎嘎!(2)
  • 语言RPA流程组件介绍--获取网页信息
  • 上位机图像处理和嵌入式模块部署(linux小系统开发)
  • 字符串 下【KMP再续】
  • GitHub每日最火火火项目(9.22)
  • 【Elasticsearch系列十八】Ik 分词器
  • 解锁电商新视野:京东商品详情API——您的精准商品信息探索利器
  • Java后端中的延迟队列实现:使用Redis与RabbitMQ的不同策略
  • AI学习指南深度学习篇-Adadelta简介
  • JavaScript(二)
  • 【Linux 从基础到进阶】 AWS云服务在Linux上的应用