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

news2024/9/22 11:25:33

类与对象

类的概念

类的概念
类的定义

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

类的定义

例题

  • 看上去像“带函数的结构体”
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.coloradmin.cn/o/2154958.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

会声会影2025视频剪辑教学

会声会影2025是一款超级受欢迎的视频播放软件&#xff0c;用于剪辑和编辑各种类型的视频素材。软件具有直观的用户界面&#xff0c;使得即使对于初学者来说也能轻松上手。该软件提供了各种创意工具&#xff0c;可以帮助用户实现他们的创意想法。用户可以裁剪、合并和重新排列视…

【C++】类和对象(下)相关练习

1. 求123...n 题目要求和&#xff0c;但是像循环&#xff0c;递归&#xff0c;求和公式这样的方法都不让用&#xff0c;这种情况下我们最先想到的就是static成员变量的使用。我们每创建一个类对象就会调用一下构造函数&#xff0c;加上static修饰后出局部作用域不会销毁&#x…

【Java集合】深入了解ArrayList实现原理

概述 1.数据存储是基于动态数组实现的&#xff0c;默认初始容量为10。 2.添加数据时&#xff0c;首先需要检查元素个数是否超过数组容量&#xff0c;如果超过了则需要对数组进行扩容&#xff08;1.5倍&#xff09;&#xff1b;插入数据时&#xff0c;需要将从插入点 k 开始到数…

【FPGA】编程方式

FPGA编程方式 1 什么是PLD&#xff1f;2 什么是颗粒度&#xff1f;3 可编程逻辑器件的编程方式有哪些&#xff1f;3.1 SRAM 编程技术3.2 Flash/EEPROM 编程技术3.3 反熔丝编程技术3.4 编程技术比较 参考资料 1 什么是PLD&#xff1f; 可编程逻辑器件 英文全称为&#xff1a;pr…

使用 Terminator 的广播功能,其他窗口中输入的字母会加倍重复

现象 比如我在窗口中输入的是 ls -l&#xff0c;那么其他广播中的其他窗口输入的则会变成 llss --ll。 看大神们的分析&#xff0c;造成这个的原因可能是由于 ibus 中的一个 bug。而不是 Terminator 软件的问题。而且总会在新的 ibus 版本中出现问题&#xff0c;所以作者已经放…

构建与优化自定义进程池

1. 什么是进程池&#xff1f; 简单来说&#xff0c;进程池就是预先创建固定数量的工作进程&#xff0c;通过设计任务队列或调度算法来分配任务给空闲的进程 —— 实现“负载均衡”。 2. 进程池框架设计 枚举错误返回值&#xff1a; enum {UsageError 1,ArgError,PipeError };…

SpringBoot环境配置(Spring Boot Profile)

一、介绍 在Spring Boot中&#xff0c;spring.profiles 配置用于定义不同环境下的配置文件。这使得应用可以在不同的环境中使用不同的配置&#xff0c;比如开发环境、测试环境和生产环境等。这种方式可以避免在代码中硬编码配置信息&#xff0c;并且能够更灵活地管理应用的环境…

Linux之实战命令02:shred应用实例(三十六)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

12年计算机408考研-计算机网络

【题33】在TCP/IP体系结构中&#xff0c;直接为ICMP提供服务的协议是&#xff08;B&#xff09; A. PPP B.IP C.UDP D. TCP ICMP报文协议处与网际层&#xff0c;PPP协议处于数据链路层&#xff0c;TCP和UDP都是运输层协议。 他们都由IP直接提供服务。 【题…

算法题之每日温度

每日温度 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 示例 1: 输入…

【数据仓库】数据仓库层次化设计

一、基本概念 **1. RDS&#xff08;RAW DATA STORES&#xff0c;原始数据存储&#xff09;** RDS作为原始数据存储层&#xff0c;用于存储来自各种源头的未经处理的数据。这些数据可能来自企业内部的业务系统、外部数据源或各种传感器等。RDS确保原始数据的完整性和可访问性&…

物理学基础精解【9】

文章目录 直线与二元一次方程两直线夹角直线方程斜率两点式方程截距式方程将不同形式的直线方程转换为截距方程直线的一般方程直线一般方程的系数有一个或两个为零的直线 参考文献 直线与二元一次方程 两直线夹角 两直线 y 1 k 1 x b 1 , y 2 k 2 x b 2 形成夹角 a 1 和 a…

MATLAB语言编写的EKF程序,带大量的中文注释

三维非线性状态量的EKF&#xff08;扩展卡尔曼滤波&#xff09;&#xff0c;几乎每一行都有中文注释&#xff0c;方便初学者上手。 文章目录 代码说明绘图 代码说明 状态变量&#xff1a;x 表示三维状态&#xff0c;包括位置和速度。 协方差矩阵&#xff1a;P 用来表示估计的…

构建数字化生态系统:打造数字化转型中开放协作平台的最佳实践和关键实施技巧

在数字化转型浪潮中&#xff0c;企业如何确保成功实施至关重要。除了技术上的革新&#xff0c;企业还必须在战略执行、架构优化以及合规性管理等方面掌握最佳实践。随着云计算、大数据、人工智能等新兴技术的迅速发展&#xff0c;企业通过正确的实施技巧不仅能提升业务效率&…

CentOS中使用DockerCompose方式部署带postgis的postgresql(附kartoza/docker-postgis镜像下载)

场景 CentOS中使用Docker部署带postgis的postgresql&#xff1a; CentOS中使用Docker部署带postgis的postgresql_centos postgis插件在容器中如何安装-CSDN博客 上面使用Docker搜索和拉取kartoza/postgis时并没有任何限制。 当下如果不能科学上网时&#xff0c;大部分镜像源…

react hooks--React.memo

基本语法 React.memo 高阶组件的使用场景说明&#xff1a; React 组件更新机制&#xff1a;只要父组件状态更新&#xff0c;子组件就会无条件的一起更新。 子组件 props 变化时更新过程&#xff1a;组件代码执行 -> JSX Diff&#xff08;配合虚拟 DOM&#xff09;-> 渲…

消息中间件---Kafka

一、什么是Kafka&#xff1f; Kafka是一个分布式流处理平台,类似于消息队列或企业消息传递系统&#xff1b; 流处理事什么呢&#xff1f; 流处理就是数据处理工作流&#xff0c;本质上是一种计算机编程范例。流处理是对接收到的新数据事件的连续处理。‌它涉及对从生产者到消…

Sublime text3怎么关闭提示更新

问题 sublime text 3有新版本后,会不停地在每次启动后弹窗提示更新版本 第一步 软件安装之前&#xff0c;切记是软件安装之前&#xff01;&#xff01;&#xff01;需要在hosts中添加以下内容(屏蔽官网联网检测)&#xff1a;hosts的位置一般在C:\Windows\System32\drivers\etc…

展锐平台手机camera 软硬件架构

曾经在紫光展锐做过几年的camera驱动&#xff0c;经历过从2013 年最初的几人团队&#xff0c;每人独当一面&#xff0c;负责很多的模块的粗放&#xff0c;到后面的逐步的精细化&#xff0c;设计部门按照内核驱动&#xff0c;hal驱动&#xff0c;tuning效果&#xff0c;3A&#…

华为HarmonyOS地图服务 11 - 如何在地图上增加点注释?

场景介绍 本章节将向您介绍如何在地图的指定位置添加点注释以标识位置、商家、建筑等&#xff0c;并可以通过信息窗口展示详细信息。 点注释支持功能&#xff1a; 支持设置图标、文字、碰撞规则等。支持添加点击事件。 PointAnnotation有默认风格&#xff0c;同时也支持自定…