C++面向对象程序设计学习心得

2023-05-16

C++面向对象程序设计学习心得

经过几周c++面向对象程序设计的学习,对面向对象程序设计有了一些了解。

递归

简单地讲,递归就是程序直接或间接调用本身的编程技巧,通过把一个不能或不好解决的大问题转化为一个或几个小问题,再把这些小问题进一步分解成更小的小问题,直到最小的问题可以直接解决
递归算法的解题步骤:
1)分析问题、寻找递归:出大规模问题与小规模问题的关系,这样通过递归使问题的规模逐渐变小
2)设置边界、控制递归:找出停止条件
3)设计函数、确定参数:设计函数体中的操作及相关参数。
这里给出一个简单的例子:

求最大公约数:

递归:gcd ( m, n ) = gcd ( n, m % n )
终止条件:gcd(m,0)=m
(这里我们约定m>n)

GCD(m,n) 
  {   if (n==0) return(m);
      else return (GCD(n,m mod n));
  }

复合数据类型

在这里插入图片描述

结构体

结构体可以把不同类型、不同含义的数据当作一个整体来处理。
特点:
(1)可以对结构体变量的整体进行操作。
(2)可以对结构体变量的成员进行操作。
引用结构体变量中成员的格式为:
结构体变量名. 成员名
(3)结构体变量的初始化方法与数组类似。
小技巧: cout<<fixed<<setprecision(6)<<stu.weight<<endl中流操作符 fixed,它表示浮点输出应该以固定点或小数点表示法。使用setprecision(n)可控制输出流显示浮点数的数字个数。
另外注意,在定义结构体变量时,不能对其初始化,因为定义结构体时,并未给其分配内存,所以初值是无法存储的。
应该声明结构体变量后,手工赋值。)

运算符重载

运算符重载可以解决结构体或自定义数据类型的加法、减法等特殊含义的运算。
一般格式:
类型名 operator 运算符 (const 类型名 变量)const{

}

字符串

1.string 表示可变长度的字符序列
字符串是对象
基本操作:
(1)各种初始化方式(string s1(6,‘a’)的输出为aaaaaa)
(2)字符串之间的复制、比较、连接
(3)查询字符串长度和判断字符串是否为空
(4)访问字符串中的单个字符
(注意:1.给字符串提供数据时,遇空格或回车键结束;
2.在getline()函数中从指定输入流中读取内容,遇到换行符为止。)
2.字符串加 [ ],变成数组
在这里插入图片描述

指针

1.定义指针变量的语法:
类型 *指针变量;(注意:每个指针都有相关的类型,要在定义指针时指出)
2.取地址运算符“&”和指针解引用运算符“*”
(注意:可以定义存放指针对象的地址的指针。
例如:int **ppi = &pi; //ppi是指针的指针,存放pi的地址)
3.空指针
// 生成空指针的2种方法
**int p1 = 0;
int p2 = NULL;

4.使用指针的注意事项
(1)定义指针时,应该对指针进行初始化
(2)指针的运算
A.同类型的指针可以进行相等(==)或不相等(!=)的比较操作,比较的结果是布尔类型
B.指针可以进行加或减整数值的算术运算
C.自增、自减运算适用于指向数组元素的指针
5.通用指针void *
6.动态存储空间管理

(1)new运算符
a.分配单个对象:new 类型 或者 new 类型(初始值)
b.分配多个连续存储的对象:new 类型[数组大小]
c.定位new,在指定位置分配空间:new (指针) 类型;
(注意:1.不能对数组进行显式的初始化
2.数组大小不必是常量,是数组元素的个数,不是字节数
3.用new分配数组时,并未得到一个数组类型的对象,而是得到一个数组元素类型的指针)
(2)delete运算符
a.释放new分配的单个对象的delete形式
delete 指针;
b.释放new分配的数组的delete形式
delete[] 指针;
c.定位new没有对应的delete表达式

引用

1.引用又称为别名,它可以作为对象的另一个名字;
2.通过引用可以间接地操纵对象;
3.在程序中,引用主要用作函数的参数

类和对象

类的定义

格式:
class 类名
{
public:
公有数据成员和成员函数;
protected:
保护数据成员和成员函数;
private:
私有数据成员和成员函数;
};
注意
1.类的数据成员可以是其他类的对象,但不能以类自身的对象作为本类的成员,而类自身的指针和引用可以作为类的成员。
2.类定义必须以分号“;”结束。
3.类与结构体的区别:
没有明确指定类成员的访问权限时,C++结构体的成员是公有的,而类的成员是私有的。)

成员函数

定义:类的成员函数是实现类的行为属性的成员。
(注意:一般将成员函数声明为函数原型,在类外具体实现成员函数。)
格式:
返回值类型 类名::成员函数名(参数表)
{
函数体
}

对象

●对象是类的实例或实体。
●类与对象的关系,如同C++基本数据类型和该类型的变量之间的关系。
对象成员访问:
●圆点访问形式:对象名.公有成员
●指针访问形式:对象指针变量名->公有成员

重载函数

函数名相同,但参数不相同(类型不同,或者个数不同)的一组函数。

构造函数和析构函数

构造函数

1.构造函数是用于创建对象的特殊的成员函数,可以为对象分配空间;对数据成员赋初值;请求其他资源。构造函数不光可以 初始化对象,还可以进行其他资源的初始化。
2.构造函数名与类名相同
3.构造函数可以重载
4.构造函数可以有任意类型的参数,但没有返回类型
(注意:用户没有定义的构造函数时,系统自动提供缺省版本的构造函数,而如果我们定义构造函数,系统则不会主动生成默认构造函数,当我们定义的对象没有给参数时是非常危险的。所以我们如果定义构造函数,最少要定义两个,一个带参,一个不带参。)

析构函数

析构函数是用于取消对象的成员函数
当一个对象作用结束时,系统自动调用析构函数
析构函数的作用是进行对象消亡时的清理工作
没有用户定义析构函数时,系统提供缺省版本的析构函数
析构函数名为: ~ 类名
析构函数没有参数,也没有返回类型

初始化

构造函数初始化成员有两种方法:

1.使用构造函数的函数体进行初始化
2.使用构造函数的初始化列表进行初始化

必须使用初始化列表的几种情况:
1、数据成员为常量
2、数据成员为引用类型
3、数据成员为没有无参构造函数的类的对象
(注意:
类成员的初始化的顺序:按照数据成员在类中的声明顺序进行初始化,与初始化成员列表中出现的顺序无关)

this指针

使用:
(1)在类的非静态成员函数中返回类对象本身或对象的引用的时候,直接使用 return *this,返回本对象的地址时,return this。
(2)当参数与成员变量名相同时,如this->x = x,不能写成x = x。
(3)避免对同一对象进行赋值操作,判断两个对象是否相同时,使用this指针。

复制构造函数

语法形式
类名 :: 类名(const 类名 & 引用名 , …);
(注意:1.这里的const的作用是保护实参对象只读
2.复制构造函数要求有一个类类型的引用参数。
3. 如果没有显式定义复制构造函数,系统自动生成一个默认形式的复制构造函数。 )
以下三种情况下由编译系统自动调用:
1.声明语句中用类的一个已知对象初始化该类的另一个对象时。
2.当对象作为一个函数实参传递给函数的形参时,需要将实参对象去初始化形参对象时,需要调用复制构造函数。
3.当对象是函数的返回值时,由于需要生成一个临时对象作为函数返回结果,系统需要将临时对象的值初始化另一个对象,需要调用复制构造函数。

深复制和浅复制

浅复制:

●在用一个对象初始化另一个对象时,只复制了数据成员,而没有复制资源,使两个对象同时指向了同一资源的复制方式称为浅复制。
即:对于复杂类型的数据成员只复制了存储地址而没有复制存储内容
默认复制构造函数所进行的是简单数据复制,即浅复制

深复制

● 通过一个对象初始化另一个对象时,不仅复制了数据成员,也复制了资源的复制方式称为深复制。
● 自定义复制构造函数所进行的复制是浅复制。
(注意:深复制构造函数必须显式定义)
深复制构造函数的特点
定义:类名::类名([const] 类名 &对象名);
成员变量的处理:对复杂类型的成员变量,使用new操作符进行空间的申请,然后进行相关的复制操作。
下面给出一个例子:

Person::Person(const Person& P0) //复制构造函数的实现
{
   	 name=new char[strlen(P0.name)+1];
	strcpy(name,P0.name);
	age=P0.age;
	salary=P0.salary;
cout<<"ff"<<endl;
}

常成员

1.常数据成员是指数据成员在实例化被初始化后,其值不能改变。
2.在类的成员函数说明后面可以加const关键字,则该成员函数成为常量成员函数

常对象

如果在说明对象时用const修饰,则被说明的对象为常对象。
常对象的说明形式如下:
类名 const 对象名[(参数表)];
或者
const 类名 对象名[(参数表)];
在定义常对象时必须进行初始化,而且不能被更新。
说明:
(1)C++不允许直接或间接更改常对象的数据成员。
(2)C++规定常对象只能调用它的常成员函数、静态成员函数、构造函数(具有公有访问权限)。

静态成员

定义:1.类成员冠以static声明时,称为静态成员。
2.静态数据成员为同类对象共享。
3.静态成员函数与静态数据成员协同操作。
注意:(静态成员不属于某一个单独的对象,而是为类的所有对象所共有
定义静态成员函数的格式如下:
static 返回类型 静态成员函数名(参数表);
公有访问权限的静态成员,访问形式如下:

1.类名::静态成员函数名(实参表)
2.对象. 静态成员函数名(实参表)
3.对象指针->静态成员函数名(实参表)
4.在静态成员函数内部,直接访问

友元函数(不建议使用)

1.如果在本类(类A)以外的其他地方定义了一个函数(函数B)
A.这个函数可以是不属于任何类的非成员函数,
也可以是其他类的成员函数,
B.在类体中用friend对其(函数B)进行声明,此函数就称为本类(类A)的友元函数。
2.友元函数(函数B)可以访问这个类(类A)中的私有成员
友元类的声明格式:
==friend class 类名; ==

运算符重载

1.一元运算符
Object op 或 op Object
A.重载为成员函数,解释为:
Object . operator op ()
操作数由对象Object通过this指针隐含传递
B.重载为友元函数,解释为:
operator op (Object)
操作数由参数表的参数Object提供
2.二元运算符
ObjectL op ObjectR
A.重载为成员函数,解释为:
ObjectL . operator op ( ObjectR )
左操作数由ObjectL通过this指针传递,右操作数由参数ObjectR传递
B.重载为友元函数,解释为:
operator op ( ObjectL, ObjectR )
左右操作数都由参数传递
3.重载运算符[]和()
A.运算符 [] 和 () 是二元运算符
B.[] 和 () 只能用成员函数重载,不能用友元函数重载
重载格式 类型 类 :: operator[] ( 类型 ) ;
重载格式 类型 类 :: operator() ( 参数表 ) ;
(操作数类型不相同时,必须使用友元函数。)

学习感受

经过几个周的学习,感受颇深:
第一,感觉挺累的。这个学期课程很多,因为我是转专业过来的,补修课程都要在这个学期进行,课程量较大,有些课程还较难,不易理解。有的时候老师一布置作业就想吐,一开始老师布置的作业有点看不懂,不理解,只能找大佬问,或者上网查阅资料,真就像老师所说:“”想要完成我的作业,不熬几个夜做不出来。“”程序写了又写,改了又改,勉强到最后的提交时间才能交上作业。
第二,磨练了意志。每次做老师作业时,都要进行自我怀疑,反思自己平时到底有没有认真学,极度焦虑,极度抑郁,感觉自己啥都不会,啥也不是。然后丧失信心,不想再写,但是还要硬着头皮写。好不容易写完了,编译一下,n处报错,除了失落还是失落。。。就感觉每一次的作业都是对自己的一次洗礼。duang~
第三,激发了斗志。每次作业对我都是一项艰难的工作。然而还是有不少大佬能很快的完成并获得不错的成绩(真的好羡慕那些成绩为A的qaq)。大家都很努力,而我,技不如人,有的时候还偷懒。惭愧惭愧。。。我也要更加努力才是!!!
第四,感谢老师。老师上课讲解分析透彻,对我们严格要求。这段时间过得很充实,从老师哪里不止是学到了知识,还学到了处事的道理,感觉比以前进步了,感谢老师!
第五,对自己未来的期望。希望未来的这段时间老师布置的作业能够尽早完成,并能获得一个满意的成绩。在未来的相当一段长的时间里希望自己能够更加努力,广涉猎,多学习,不能只局限于课本知识,认真坚持专注。

不是在一瞬间就能脱胎换骨的,生命原是一次又一次的试探。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++面向对象程序设计学习心得 的相关文章

  • C++中的字符串类

    字符串类 历史遗留的问题 1 C语言不支持真正意义上的字符串 xff1b 2 C语言用字符数组和一组实现字符串操作 xff1b 3 C语言不支持自定义类型 xff0c 因此无法获得字符类型 xff1b 解决方案 1 从C到C 43 43 的
  • MySQL中的Block Nested Loop优化分析

    前言 一般在MySQL规范中 xff0c 都会规定如果两张表进行join查询 xff0c 那么join的字段一定要有索引 xff0c 在之前的文章中我们分析了MySQL join大小表前后顺序影响分析 xff0c 这是在有索引的情况下 xf
  • C++之类模板的概念和意义

    类模板 一些类主要用于存储和组织数据元素 类中数据组织的方式和数据元素的具体类型无关 如 xff1a 数组类 链表类 Stack Queue类 等 1 C 43 43 中将模板的思想应用于类 xff0c 使得类的实现不关注数据元素的具体类型
  • C++之单例类模板

    需求的提出 在架构设计时 xff0c 某些类在整个系统生命周期中最多只能有一个对象存在 xff08 Single Instance xff09 要控制类的对象数目 xff0c 必须对外隐藏构造函数 xff1b 思路 xff1a 1 将构造函
  • 【无标题】

    绘图控件GraphicsView 一 GraphicsView简介 1 QT有多种绘图相关的技术 xff0c 我们将在第2部分 2 4 QT绘图和图表 中比较详细系统的讲 2 本节简单讲一下GraphicsView的基本理论 xff0c 并
  • uboot源码分析之start.S解析

    1 start S引入 1 1 u boot lds中找到start S入口 1 在uboot中因为有汇编阶段参与 xff0c 因此不能直接找main c 整个程序的入口取决于链接脚本中ENTRY声明的地方 ENTRY start 因此 s
  • uboot启动第二阶段

    uboot启动第二阶段 start armboot函数简介 一个很长的函数 1 这个函数在uboot lib arm board c的第444行开始到908行结束 2 450行还不是全部 xff0c 因为里面还调用了别的函数 3 为什么这么
  • cmake设置编译类型为release命令

    cmake编译类型通常默认为debug xff0c 但是在编译软件时 xff0c 一般都需要使用release版本的 xff0c debug太慢了 设置为release版本可以在cmake文件里进行 xff0c 也可以在运行cmake命令时
  • 设计模式之单例模式(Singleton),以C++为例,实现日志输出。

    Hello大家好 xff0c 好久没更新了 xff0c 今天给大家补上最基础的设计模式 xff1a 单例模式 这个单例模式实在是我的心结啊 xff0c 2021年末左右面试京东算法岗 xff0c 面试官让我写一个单例 xff0c 没写出来
  • 源码分析MyBatis对数值(int、double)类型进行test判断的误区

    文章目录 问题描述问题分析验证解析表达式执行解析后表达式分别测试两个条件 查询Ognl官方文档验证问题解决 问题描述 在如下判断中 xff0c 如果type类型为int xff0c 那么对于type 61 39 39 部分判断会出现一些问题
  • Git报错:error: xxxx bytes of body are still expected.

    git一个很老的项目 xff0c 项目深度很深 xff0c 报错 xff1a error 7857 bytes of body are still expected fetch pack unexpected disconnect whil
  • 设计模式之代理模式(Proxy),以C++为例,实现远程代理、虚拟代理、保护代理等。

    兄弟姐妹们好 xff0c 又是好久没有更新了 xff0c 今天给大家简单介绍代理模式 xff0c 一个很简单的设计模式 xff0c 旨在不改变原对象的情况下通过代理对象来控制对原对象的访问 代理模式根据具体情况还可以分为远程代理 虚拟代理
  • C++ 互斥锁原理以及实际使用介绍

    兄弟姐妹们 xff0c 我又回来了 xff0c 今天带来实际开发中都需要使用的互斥锁的内容 xff0c 主要聊一聊如何使用互斥锁以及都有哪几种方式实现互斥锁 实现互斥 xff0c 可以有以下几种方式 xff1a 互斥量 xff08 Mute
  • 【C++】使用【windwos api】获取windwos计算机的基本信息

    今天来一篇获取windows计算机的基本信息的文章 xff0c 包含计算机名称 操作系统版本 处理器信息 内存信息 硬盘信息 显示器信息 网络信息 驱动程序信息 电源信息 其他硬件信息 目录 一 windwos系统包含的基本信息 二 获取信
  • C++ POCO库的基础介绍(Windwos和Linux)

    简单介绍C 43 43 POCO库能干什么 xff0c 后续有时间的话将根据其每个点详细解析 xff0c 关注我 本篇包含POCO库简单介绍 下载以及安装方式 简单代码示例 目录 一 POCO简单介绍 1 1 POCO库的基本模块 1 2
  • ROS踩坑记录

    ROS踩坑记录 问题 xff1a ubuntu 没有 dev ttyUSB0问题 xff1a 运行 launch 文件或 ROS 节点时出现 exit code 9 错误提示问题 xff1a windows使用vscode远程连接 xff0
  • STM32串口数据接收 --环形缓冲区

    STM32串口数据接收 环形缓冲区 环形缓冲区简介 在单片机中串口通信是我们使用最频繁的 xff0c 使用串口通信就会用到串口的数据接收与发送 xff0c 环形缓冲区方式接收数据可以更好的保证数据丢帧率第 在通信程序中 xff0c 经常使用
  • 如何设计安全可靠的开放接口---对请求参加密保护

    文章目录 如何设计安全可靠的开放接口 系列前言AES加解密代码实现 如何设计安全可靠的开放接口 系列 1 如何设计安全可靠的开放接口 之Token 2 如何设计安全可靠的开放接口 之AppId AppSecret 3 如何设计安全可靠的开放
  • rosdep init报错解决方法

    rosdep init报错解决方法 很多小伙伴在安装ROS的过程中都不可避免的要执行rosdep init和rosdep update这两行命令行 xff0c 这也是在安装ROS的过程中最让人头疼的两步 xff0c 一般都没法一次成功 xf

随机推荐

  • NVIDIA Jetson Nano/Xavier NX 扩容教程

    在售的 NVIDIA Jetson 内置 16 GB 的 eMMC xff0c 并已安装了 ubuntu 18 04 LTS 和 NVIDIA JetPack 4 6 xff0c 所以剩余的用户可用空间大约 2GB xff0c 这对将 NV
  • 深度学习框架YOLOv3的C++调用

    深度学习框架YOLOv3的C 43 43 调用 深度学习框架YOLOv3的C 43 43 调用 xff08 1 xff09 tensorflow版本的YOLOv3的C 43 43 调用 xff08 失败 xff09 xff08 2 xff0
  • 基于GPT-2实现图像文本生成

    原理 使用GPT 2模型处理文本 xff0c 做decoder 使用google的vit base patch16 224模型处理图像 xff0c 做encoder 最后通过VisionEncoderDecoderModel将这两个模型粘起
  • C语言中常见的两个比较字符串是否相等的函数strcmp和strncmp

    函数 xff1a strcmp和strncmp strcmp 使用格式 xff1a include lt string h gt int strcmp const char s1 const char s2 设这两个字符串为str1 xff
  • sprintf和printf 用法的区别

    printf 的作用是标准化输出 xff0c 默认的对象是标准输出缓冲区 xff0c 要有一定的条件才能把缓冲区里面的数据输出 sprintf 作用是格式化输出函数 xff0c 保存字符串到缓冲区中 xff0c 起到拼接字符串的作用 功能
  • 第六篇,STM32脉冲宽度调制(PWM)编程

    1 PWM概念 PWM叫脉冲宽度调制 Pulse Width Modulation xff0c 通过编程控制输出方波的频率和占空比 高低电平的比例 xff0c 广泛应用在测量 xff0c 通信 xff0c 功率控制等领域 呼吸灯 xff0c
  • 第十篇,STM32串口蓝牙编程

    1 串口蓝牙概念 串口蓝牙是一个蓝牙模块 xff0c 内部有蓝牙模块和程序 xff0c 可以进行蓝牙通信 xff0c 同时提供一个串口接口 xff0c 通过串口可以配置蓝牙模块进行数据传输 2 使用串口3连接蓝牙模块 3 手机上安装蓝牙调试
  • LeetCode岛屿问题通用解决模板

    文章目录 前言第一题 xff1a 求岛屿的周长模板整理遍历方向确定边界重复遍历问题处理 模板解第一题第二题 xff1a 求岛屿数量第三题 xff1a 岛屿的最大面积第四题 xff1a 统计子岛屿第五题 xff1a 统计封闭岛屿的数目第六题
  • 第十四篇,STM32的CAN总线通信

    1 CAN总线的概念 CAN指的是控制器局域网网络 Controller Area Network xff0c 由德国博世汽车电子厂商开发出来 CAN使用差分信号 xff0c 具有较强的抗干扰能力和传输稳定性 CAN属于多主通信 xff0c
  • OpenCV图像处理学习十九,像素重映射cv::remap

    一 像素重映射概念 重映射就是把输入图像中各个像素按照制定的规则顺序映射到另外一张图像的对应位置上去 xff0c 形成一张新的图像 二 像素映射API函数接口 cv remap xff08 InputArray src 输入图像 Outpu
  • OpenCV图像处理学习二十一,直方图比较方法

    一 直方图比较 直方图比较是对输入的两张图像进行计算得到直方图H1与H2 xff0c 归一化到相同的尺度空间 xff0c 然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度 xff08 每张图像都有唯一的直方图与之对应 xff0
  • 嵌入式FreeRTOS学习九,任务链表的构成,TICK时间中断和任务状态切换调度

    一 tskTaskControlBlock 函数结构体 在tskTaskControlBlock 任务控制块结构体中 xff0c 其中有任务状态链表和事件链表两个链表成员 xff0c 首先介绍任务状态链表这个结构 xff0c 这个链表通常用
  • SOAP传输协议

    一 HTTP传输协议 超文本传输协议 xff08 HyperText Transfer Protocol xff0c 缩写 xff1a HTTP xff09 xff0c 它是基于请求 响应的模式协议 xff0c 客户端发出请求 xff0c
  • ONVIF简介

    一 什么是ONVIF ONVIF规范描述了网络视频的模型 接口 数据类型以及数据交互的模式 并复用了一些现有的标准 xff0c 如WS系列标准等 ONVIF规范的目标是实现一个网络视频框架协议 xff0c 使不同厂商所生产的网络视频产品 x
  • gsoap工具生成onvif设备搜索(remotediscovery)代码框架

    什么是gsoap工具 xff1f gSOAP 提供了两个工具来方便开发人员使用 C C 43 43 语言快速开发Web 服务应用 xff0c 通过 gSOAP 提供的这两个工具 xff0c 开发人员可以快速生成服务端与客户端代码框架 xff
  • Latex之给字符上加横线、波浪等

    Latex 前几天想在 x x x 上加波浪号 xff0c 一时间忘记怎么打 xff0c 现在记录下来 xff0c 以后好查阅 加 号 xff1a hat x 加横线 xff1a overline x 加宽 xff1a widehat x
  • 数据结构笔记-2(线性表)

    线性表 2 1 线性表 1 定义 是零个或多个具有相同类型的数据元素的有序数列 xff1b xff08 长度等于零的线性表为空表 xff09 非空线性表通常记为 xff1a L xff1d a 1 xff0c a 2 xff0c xff0c
  • 数据结构-6(图)

    图 图的逻辑结构 图的定义 xff1a 图是由顶点的有穷非空集合和顶点之间边的集合组成 xff0c 通常表示为 xff1a G 61 V xff0c E 其中 xff1a G表示一个图 xff0c V是图G中顶点的集合 xff0c E是图G
  • 【leetcode常见面试题】螺旋矩阵解题思路

    文章目录 螺旋矩阵解题思路先找行进路线找每条路线的结束位置再找每条路线的结束位置模拟行走 螺旋矩阵 II总结 螺旋矩阵 解题思路 本题可以采用模拟的方式 xff0c 设4种行走方向 xff0c 如下图 xff1a 先找行进路线 4个方向的行
  • C++面向对象程序设计学习心得

    C 43 43 面向对象程序设计学习心得 经过几周c 43 43 面向对象程序设计的学习 xff0c 对面向对象程序设计有了一些了解 递归 简单地讲 xff0c 递归就是程序直接或间接调用本身的编程技巧 xff0c 通过把一个不能或不好解决