【C++ 程序设计】第 2 章:面向对象的基本概念

news2024/11/19 5:57:59

目录

一、结构化程序设计

二、面向对象程序设计的概念和特点

(1)面向对象程序设计的概念

(2)面向对象程序设计的特点 

三、类的初步知识

(1)类的定义

(2)类的定义示例

四、类的示例程序剖析

(1)程序结构

(2)成员变量与成员函数的定义

(3)创建类对象的基本形式

① 方法一

② 方法二

③ 方法三

五、访问对象的成员

(1)使用对象访问成员变量与调用成员函数 

(2)使用指针访问对象的成员 

(3)使用引用访问对象的成员 

六、类成员的可访问范围

(1)访问范围说明符的含义

(2)成员的访问

(3)隐藏的作用 

七、标识符的作用域与可见性

(1)函数原型作用域 

(2)局部作用域 

(3)类作用域  

(4)命名空间作用域 

(5)作用域隐藏规则




一、结构化程序设计

在结构化程序设计中,采用 自顶向下、逐步求精及模块化 的思想,将复杂的大问题层层分解为许多简单的小问题。
在编写程序时,使用 3 种基本控制结构来构造程序。
  • 可以说,程序基本上都含有顺序、选择、循环 3 种基本控制结构,这 3 种结构到目前为止仍是主要的控制结构。
  • 程序以控制结构为单位,只有一个入口和一个出口,基于控制结构可以从前往后地顺序阅读程序,程序的静态描述与执行时的控制流程容易对应,所以可以独立地理解各个部分。
  • 结构化程序设计主要强调的是程序的易读性。


二、面向对象程序设计的概念和特点

(1)面向对象程序设计的概念

所谓面向对象的程序设计方法,就是使分析、设计和实现一个系统的方法尽可能地接近人们认识一个系统的方法。通常包括 3 个方面:
  1. 面向对象的分析
  2. 面向对象的设计
  3. 面向对象的程序设计
面向对象技术把问题看成是相互作用的事物的集合,也就是对象的集合。
  • 对象具有两个特性:一是状态;二是行为。
  • 状态是指对象本身的信息,也称为属性
  • 行为是对对象的操作
  • 通过对事物的抽象找出同一类对象的共同属性(静态特征)和行为(动态特征),从而得到类的概念
  • 对象是类的一个具象,类是对象的一个抽象

(2)面向对象程序设计的特点 

C++ 中使用 对象名属性 和 操作 三要素来描述对象。

面向对象的程序设计有 抽象封装继承 和 多态 4 个基本特点:

1. 抽象:对象是系统中用来描述客观事物的一个实体,如各位员工是员工类的一个个对象。
  • 对象的特点包括两个方面:属性和操作
  • 属性指的是描述对象静态特征的数据项,如员工的姓名、职位、薪水等,可以用变量来表示
  • 操作指的是描述对象动态特征(即行为)的函数序列,也称为方法或服务,如员工可以请假、加班,员工还可以获得提拔、加薪等
2. 封装:在 C++ 中,通过用户定义的 来支持数据封装和信息隐藏。
3. 继承:在 C++ 现有类的基础上可以声明新的类,将一个已有类中的数据和函数保留,并加上自己特殊的数据和函数,从而构成一个新类,这就是继承和复用的思想。
  • 原来的类是基类,也称为父类超类
  • 新类是派生类,也称为子类
4. 多态:多态是指不同种类的对象都具有 名称相同 的行为,而具体行为的实现方式却有所不同。
  • 在一个类或多个类中,可以让多个方法使用同一个名字,从而具有多态性
  • 这是通过函数重载及运算符重载实现的多态



三、类的初步知识

C++的基本数据类型
名称
bool
布尔型
char
字符型
int
整型
float
浮点型
double
双精度浮点型

(1)类的定义

名称代表描述
成员变量代表对象的“属性”是类中的一类成员,个数不限,也称为数据成员。
成员变量的声明方式与普通变量的声明相同。
成员函数代表对该类对象所含
数据进行操作的方法
是类中的另一类成员,个数不限,其声明方式与普通函数的声明相同。
类中的成员:
  • 按功能划分,包括 成员变量 和 成员函数
  • 按访问权限划分,包括 公有成员私有成员 和 保护成员
在 C++ 中还可以定义不是任何类的成员的函数,这样的函数可称为 “ 全局函数 ” 。
成员函数既可以在类体内定义,也可以在类体外定义。
  • 如果成员函数定义在类体内部,则默认是内联函数
  • 也可以在类体内部声明函数,并加上 inline 关键字,然后在类体外给出函数定义,这样的成员函数也是内联函数
标识符命名规则
  • 字母、数字和下划线的组合
  • 大小写敏感
  • 不能以数字开头
  • 不能和系统中使用的关键字完全相同
是具有 唯一标识符 的实体,就是说 类名不能重复
  • 类定义以 “;” 结束
  • 大括号中的部分称为类体
定义类时系统并不为类分配存储空间 ,而只是把类看作是一种模板或样板。
  • 或者说,类可以看作是用户自定义的一种数据类型
  • 在 C++ 98 标准下,类中声明的任何成员不能使用 auto、extern 和 register 关键字进行修饰
如果成员函数定义在类体外,则类体内必须要有函数原型, 类体外函数定义的前面必须用 “类名::” 来限定,格式如下:
返回值类型 类名::成员函数名(参数列表)
{
  成员函数的函数体
}
  • 类名是成员函数所属类的名字
  • 符号 :: 是类作用域运算符,表明它后面的成员函数是属于类名标识的这个类的。
  • 返回值类型就是这个成员函数返回值的类型
类 C 中不能定义类 C 的成员变量,但可以定义类 C 的指针和引用

(2)类的定义示例

#include<iostream>
#include<string>
using namespace std;

class myDate 
{
  public:
      myDate();                         //构造函数
      myDate(int, int, int);            //构造函数
      void setDate(int, int, int);      //设置日期
      void setDate(myDate);             //设置日期
      myDate getDate();                 //获取日期
      void setYear(int);                //设置年
      int getMonth();                   //获取月
      void printDate() const;           //打印日期
  private:
      int year, month, day;             //成员变量,表示年、月、日
}
// 在类体外定义成员函数
myDate::myDate()
{ 
  year=1970,month=1,day=1;
}

myDate::myDate(int y, int m, int d)
{ 
  year=y;month=m;day=d;
}

void myDate::setDate(int y, int m, int d) 
{ 
  year=y;month=m;day=d;
  return;
}

void myDate::setDate(myDate oneD)
{ 
  year = oneD.year; month = oneD.month; day = oneD.day;
  return;
}

myDate myDate::getDate()
{ 
  return *this;
}

void myDate::setYear(int y)
{
  year = y;
  return;
}

int myDate::getMonth()
{
  return month;
}

void myDate::printDate() const 
{
  cout<<year <<"/"<<month<<"/"<<day;
  return;
}
class Student 
{
  public:
      void setStudent(string, myDate);    //设置学生信息
      void setName(string);               //设置姓名
      string getName();                   //获取姓名
      void setBirthday(myDate);           //设置生日
      myDate getBirthday();               //获取生日
      void printStudent() const;          //打印信息
  private:
      string name;                        //姓名
      myDate birthday;                    //生日
};


// 在类体外定义成员函数
void Student::setStudent(string s, myDate d)
{ 
  name = s;
  birthday.setDate(d);
  return;
}

void Student::setName(string n)
{ 
  name = n; 
  return;
}

string Student::getName() 
{ 
  return name;
}

void Student::setBirthday(myDate d)
{ 
  birthday.setDate(d);
  return;
}

myDate Student::getBirthday() 
{ 
  return birthday;
}

void Student::printStudent() const 
{ 
  cout<<"姓名:"<<name<<"\t生日:";
  birthday.printDate();              //调用类myDate的成员函数
  cout<<endl;
}

int main( ) 
{ 
  Student ss; 
  int y,m,d; 
  string name_;
  cout<<"请输入学生的姓名和生日,生日以\"年月日\"的次序输入:";
  cin>>name_>>y>>m>>d;
  ss.setStudent(name_, myDate(y, m, d));
  ss.printStudent();
  return 0;
}


四、类的示例程序剖析

(1)程序结构

一个完整的 C++ 程序包括以下几部分:
  • —个主函数,可以调用其他函数,但不能被调用,也称为主程序
  • 用户定义的任意多个的类及全局函数
  • 全局说明:在所有函数和类定义之外的变量说明及函数原型
  • 注释
  • 头文件
对于比较大的程序,根据主函数和各用户定义的类及全局函数的功能及相互关系,可以
把类及全局函数划分为几个程序文件,包括 .cpp 文件和 .h 文件。
  • .cpp文件是源程序文件
  • .h文件是头文件
从逻辑关系上看,典型的 C++ 程序的结构包括类的定义、类中成员函数的实现及主函数
main。

(2)成员变量与成员函数的定义

实现成员函数时要指明类的名称,在类体外定义的一般格式如下:
返回值类型 类名::函数成员名(参数表)
{
       函数体
}
  • 成员函数并非每个对象各自存有一份。
  • 成员函数和普通函数一样,在内存中只有一份,它可以作用于不同的对象,为类中各对象共享
  • 通常,因为函数体代码较长,所以在类体内仅给出成员函数的原型,然后在类体外给出对应的函数体。
  • 如果函数体定义在类体内,则系统将其视为内联函数。
  • 类中定义的成员函数允许重载

(3)创建类对象的基本形式

① 方法一

【基本格式】类名 对象名;

【其他扩展单个对象写法】

  • 类名 对象名(参数);
  • 类名 对象名=类名(参数);
【其他扩展多个对象写法】
  • 类名 对象名1, 对象名2, …;
  • 类名 对象名1(参数1), 对象名2(参数2), …;

② 方法二

【基本格式】类名 *对象指针名 = new 类名;

【其他扩展写法】

  • 类名 *对象指针名 = new 类名();
  • 类名 *对象指针名 = new 类名(参数);
【说明】
  • 用 new 创建对象时返回的是一个对象指针,这个指针指向本类刚创建的这个对象
  • C++ 分配给指针的仅仅是存储指针值的空间,而对象所占用的空间分配在堆上
  • 使用 new 创建的对象,必须用  delete  来撤销

③ 方法三

与基本数据类型一样,还可以声明对象的引用、对象的指针及对象的数组。

【基本格式】

1. 声明对象引用,即变量别名的基本格式如下:
  • 类名 &对象引用名 = 对象;
2. 声明对象指针,即指向对象的指针的基本格式如下:
  • 类名 *对象指针名 = 对象的地址;
3. 声明对象数组的格式如下:
  • 类名 对象数组名[数组大小];

【说明】

  • 同类型的对象之间可以相互赋值
  • 对象和对象指针都可以用作函数参数
  • 函数的返回值可以是对象或指向对象的指针

【示例】定义了类 C 后,可以有如下的声明:

C a1,b1;      //定义了 C 类的对象 a1 和 b1
C *p = &a1;   //定义了指向对象 a1 的 C 类类型的指针 p
C &R = b1;    //定义了 C 类类型对象 b1 的引用 R
C A[3];       //定义了 C 类类型对象的数组 A,含 3 个元素


五、访问对象的成员

定义了类和对象后,就可以访问对象的成员。
【基本格式】

1. 通过对象访问成员变量的一般格式如下:

  • 对象名.成员变量名
2. 调用成员函数的一般格式如下:
  • 对象名.成员函数名(参数表)

(1)使用对象访问成员变量与调用成员函数 

int main( ) 
{ 
  Student ss; 
  int y,m,d; 
  string name_;
  cout<<"请输入学生的姓名和生日,生日以\"年月日\"的次序输入:";
  cin>>name_>>y>>m>>d;
  ss.setStudent(name_, myDate(y, m, d));
  ss.printStudent();
  return 0;
}


(2)使用指针访问对象的成员 

  1. 除了 对象名.成员名” 的格式外,还可以使用指针或引用的方式来访问类成员。
  2. 如果是通过指针访问成员变量,则点运算符 . 换为箭头运算符 -> ,即使用 指针->成员名” 的方式来访问对象的成员。
int main( ) 
{
  Student ss; 
  int y, m, d; 
  string name_;
  Student *sp = &ss;   //指向 ss 的指针 sp
  cout<<"请输入学生的姓名和生日,生日以\"年月日\"的次序输入:";
  cin >>name_>>y>>m>>d;
  sp->setStudent(name_,myDate(y,m,d));
  sp->printStudent( );
  return 0;
}


(3)使用引用访问对象的成员 

【示例】

int main( ) 
{
  Student ss; 
  int y,m,d; 
  string name_;
  Student &sy=ss;   //指向 ss 的指针 sp
  cout<<"请输入学生的姓名和生日,生日以\"年月日\"的次序输入:";
  cin>>name_>>y>>m>>d;
  sy.setStudent(name_,myDate(y,m,d));
  sy.printStudent( );
  return 0;
}

【分析】

  • 程序中定义了引用 sy 并进行初始化后,sy 与 ss 成为同一个对象的两个不同的名字。
  • 访问成员时仍使用点操作符,即 “引用名.成员名


六、类成员的可访问范围

(1)访问范围说明符的含义

访问范围说明符含义作用
public公有的使用它修饰的类的成员可以在程序的任何地方被访问
private私有的使用它修饰的类的成员仅能在本类内被访问
protected保护的它的作用介于public与private之间,使用它修饰的类的成员能在本类内及子类中被访问
私有类型的成员在类外是不能访问的,通过公有函数访问的效率比直接访问的效率要 低。
  • 为了权衡这两方面的因素,C++ 提供了友元访问方式。
  • 只有在类内和在友元函数内才可以访问私有成员。
类中定义的成员默认访问属性为  private 

(2)成员的访问

#include <iostream> 
using namespace std; 

class Box
{
  public: //公有的
      double length;
      void setWidth(double wid); 
      double getWidth();
  private: //私有的
      double width;
};


//类体外定义成员函数
double Box::getWidth()
{ 
  return width ;
}

void Box::setWidth(double wid)
{ 
  width=wid;
}

int main()
{ 
  Box box; //声明一个对象
  //不使用成员函数设置长度
  box.length=10.0; //正确,因为 length 是公有的
  cout<<"Length of box:"<<box.length<<endl; //输出Length of box:10
  //不使用成员函数设置宽度
  //box.width=10.0; //错误,因为width是私有的
  box.setWidth(10.0); //必须使用成员函数设置宽度
  cout<<"Width of box:"<<box.getWidth()<<endl; //输出Width of box:10
  return 0;
}

 

#include <iostream> 
#include <string> 
using namespace std; 

class CEmployee
{
  private:
      string szName; //姓名
      int salary; //工资
  public:
      void setName(string); //设置姓名
      string getName(); //获取姓名
      void setSalary(int); //设置工资
      int getSalary(); //获取工资
      int averageSalary(CEmployee); //计算两人的平均工资
};

void CEmployee::setName(string name)
{ 
  szName = name;
}

string CEmployee::getName()
{ 
  return szName;
}

void CEmployee::setSalary(int mon) 
{ 
  salary = mon;
}

int CEmployee::getSalary() 
{ 
  return salary;
}

int CEmployee::averageSalary(CEmployee e1) 
{ 
  return ( salary + e1 .getSalary() )/2;
}

int main()
{ 
  CEmployee eT, eY;
  //eT.szName ="Tom1234567"; 
  eT.setName("Tom1234567"); 
  //eT.salary=5000; //编译错误,不能直接访问私有成员
  eT.setSalary(5000); //需要通过公有成员函数访问
  cout<<eT.getName()<<endl; //输出 Tom1234567
  eY.setName("Yong7654321"); 
  eY.setSalary(3500);
  cout<<eY.getName()<<endl; //输出 Yong7654321
  cout<<"aver="<<eT.averageSalary(eY)<<endl; return 0;
}

 


(3)隐藏的作用 

  • 设置私有成员的机制叫作 “隐藏” 。
  • “隐藏” 的一个目的就是强制对私有成员变量的访问一定要通过公有成员函数进行。
  • 这样做的好处是:如果以后修改了成员变量的类型等属性,只需要更改成员函数即可。
  • 否则,所有直接访问成员变量的语句都需要修改。


七、标识符的作用域与可见性

标识符是组成程序的最小成分之一。
  • 类名、函数名、变量名、常量名和枚举类型的取值等都是标识符。
  • 这些标识符有各自的作用域和可见性。
  • 标识符的作用域是指标识符的有效范围,即它在程序中的存在区域。
  • 标识符的可见性是指在程序的哪个区域里可以使用。
  • 对于同一个标识符来说,这两个区域可能是不完全重合的。
C++ 中标识符的作用域有: 函数原型作用域、局部作用域(块作用域)、 类作用域和命名空间作用域。

(1)函数原型作用域 

在声明函数原型时形参的作用范围就是函数原型作用域,这是 C++ 程序中最小的作用域。例如,有如下的函数声明:
  • double area(double radius);
标识符 radius 的作用范围就在函数 area 形参列表的左右括号之间,在程序的其他地方不能引用这个标识符。
  • 因为函数声明中形参仅在形参列表中有效,所以,函数声明中往往不写形参名,而仅写形参的类型.作用域。

(2)局部作用域 


(3)类作用域  

类可以被看成是一组有名字的成员的集合,类 X 的成员 m 具有类作用域,对 m 的访问方式有如下 3 种:
  1. 如果在类 X 的成员函数中没有声明同名的局部作用域标识符,那么在该函数内可以直接访问成员 m 。也就是说,m 在这样的函数中起作用。
  2. 在类外,可以通过表达式 x.m 或者 X::m 来访问,其中 x 是类 X 的对象。这正是程序中访问对象成员的最基本方法。当然,这样的访问不能违反 m 的访问修饰符的限定。
  3. 在类外,可以通过 ptr->m 这样的表达式来访问,其中 ptr 为指向类 X 的一个对象的指针。当然,这样的访问不能违反 m 的访问修饰符的限定。

(4)命名空间作用域 

【格式】 

1. 定义命名空间的一般形式如下:
namespace 命名空间名
{
     命名空间内的各种声明(函数声明、类声明、…)
}
2. 在命名空间内部可以直接引用当前命名空间中声明的标识符,如果需要引用其他命名空间的标识符,需要使用下面的方式:
命名空间名::标识符名
3. 在标识符前面总要加上这样的命名空间限定会显得过于冗长,为了解决这一问题,C++
又提供了 using 语句,using 语句有两种形式:
  • using 命名空间名::标识符名;
  • using namespace命名空间名;
【示例】 
1.  定义一个命名空间如下:
namespace SomeNs
{
  class SomeClass{……};
  someFunc(int a){ }
};

2. 如果需要引用类名 SomeClass 或者函数名 someFunc(),需要使用下面的方式:

SomeNs::SomeClass obj1; //声明一个SomeNS::SomeClass型的对象obj1
SomeNs::someFunc(5); //调用someFunc()函数

(5)作用域隐藏规则

具有命名空间作用域的变量也称为全局变量 

对于在不同的作用域声明的标识符,可见性的一般原则如下:
  1. 标识符要声明在前,引用在后。
  2. 在同一个作用域中,不能声明同名的标识符。在没有互相包含关系的不同作用域中声明的同名标识符,互不影响。
  3. 如果存在两个或多个具有包含关系的作用域,外层声明了一个标识符,而内层没有再次声明同名标识符,那么外层标识符在内层仍然可见。如果在内层声明了同名标识符,则外层标识符在内层不可见,这时称内层标识符隐藏了外层同名标识符,这种机制称为隐藏规则。

【示例】

#include <iostream> 
using namespace std; 
int main()
{
  int a=1;
  cout<<a<<“\n”; //输出 1
  for(int i=1; i<2; i++)
     { 
       int a=2;
       cout<<a<<"\n"; //输出 2
     }
  cout<<a<<“\n”; //输出 1
  return 0;
}

【分析】

  • 主函数中有嵌套的两个块。
  • 外层块中定义了变量 ,赋初值 
  • 内层块(for 循环)中也定义了变量 a ,赋初值 
  • 这两个变量互相独立。
  • 在 for 循环中,外层定义的变量 将不可见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/603797.html

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

相关文章

Three.js--》实现3d踢球模型展示

目录 项目搭建 初始化three.js基础代码 设置环境纹理加载模型 使用Cannon-es实现物理世界 今天简单实现一个three.js的小Demo&#xff0c;加强自己对three知识的掌握与学习&#xff0c;只有在项目中才能灵活将所学知识运用起来&#xff0c;话不多说直接开始。 项目搭建 本…

Linux4.6LNMP架构

文章目录 计算机系统5G云计算第五章 LINUX LNMP架构一、安装 Nginx 服务1.关闭防火墙&#xff0c;将安装nginx所需软件包传到/opt目录下2.安装依赖包3.创建运行用户、组4.编译安装Nginx5.添加 Nginx 系统服务6.修改nginx服务配置文件 三、编译安装mysqld 服务1.将安装mysql 所需…

MySQL—存储引擎(下)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️树高千尺&#xff0c;落叶归根人生不易&…

Windows部署WSL开启pwn之旅

不用虚拟机来操作真的太爽了&#xff01;&#xff01;还有和vscode的联动&#xff0c;更是妙绝&#xff01; 目录 前言 一、WSL获取 开启WSL支持 二、各种操作 1.apt 换源 2.更新软件 3.配置SSH服务器&#xff08;对于pwn来说非必要&#xff09; 4.WSL访问windows文件 …

【ChatGPT 】国内无需注册 openai 即可访问 ChatGPT:WeTab 浏览器扩展程序的安装与使用

目录 一、Sider&#xff1a;每天免费 30 查询额度【暂不推荐】 &#xff08;1&#xff09;Edge 浏览器扩展程序&#xff1a;Sider - ChatGPT【暂不推荐】 &#xff08;2&#xff09;iOS 手机 APP&#xff1a;Sider- Al 搭档&#xff08;有需要可以安装&#xff09; 二、 We…

chatgpt赋能python:Python创建画布的教程

Python 创建画布的教程 Python是一个功能强大的编程语言&#xff0c;其中一个重要的应用是数据可视化。在数据科学、机器学习、图像处理和软件开发中&#xff0c;Python的可视化功能非常实用。本教程将介绍Python创建画布的步骤&#xff0c;以及如何使用Matplotlib创建简单的图…

生产案例:消息堆积排查分析

&#x1f4dd;作者简介&#xff1a; 大家好&#xff0c;我是CBeann&#xff0c;CSDN博客专家&#xff0c;阿里云专家博主。 22届校招进入阿里广告部门从事Java开发工程师。 平时有空会帮大家解决问题&#xff0c;模式面试和日常答疑&#xff0c;并且提供免费云服务器使用。 有一…

2023年06月IDE流行度最新排名

点击查看最新IDE流行度最新排名&#xff08;每月更新&#xff09; 2023年06月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多&#xff0c;这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…

Linux4.5Nginx网站服务

文章目录 计算机系统5G云计算第五章 LINUX Nginx网站服务一、编译安装Nginx服务1.关闭防火墙&#xff0c;将安装nginx所需软件包传到/opt目录下2.安装依赖包3.创建运行用户、组4.编译安装Nginx5.检查、启动、重启、停止 nginx服务6.添加 Nginx 系统服务 二、认识Nginx服务的主配…

【数据结构】---几分钟简单几步学会手撕链式二叉树(下)

文章目录 前言&#x1f31f;一、二叉树链式结构的实现&#x1f30f;1.1 二叉树叶子节点个数&#x1f4ab;代码&#xff1a;&#x1f4ab;流程图&#xff1a; &#x1f30f;1.2 二叉树的高度&#x1f4ab;第一种写法(不支持)&#xff1a;&#x1f4d2;代码&#xff1a;&#x1f…

​Memcached 架构

Memcached是一种内存中的键值存储&#xff0c;最初是用Perl编写的&#xff0c;后来重写为C语言。它受到Facebook、Netflix和Wikipedia等公司的欢迎&#xff0c;因为它简单易用。 虽然当谈论到软件描述时&#xff0c;“简单”这个词已经失去了意义&#xff0c;但我认为Memcache…

chatgpt赋能python:用Python制作AI:优化搜索引擎结果的关键

用Python制作AI&#xff1a;优化搜索引擎结果的关键 搜索引擎正成为我们日常生活不可或缺的一部分。无论是寻找答案、娱乐还是购物&#xff0c;大多数人都会先打开搜索引擎。随着越来越多的数据被放入互联网中&#xff0c;如何让搜索引擎结果与用户的搜索意图相符&#xff0c;…

chatgpt赋能python:用Python办公自动化轻松完成繁琐重复的工作

用Python办公自动化轻松完成繁琐重复的工作 随着科技的进步&#xff0c;许多传统工作已经被自动化取代。而在许多职业中&#xff0c;办公自动化通常被认为是节省时间和减少错误的最佳方法。对于那些使用Microsoft Office&#xff0c;例如Excel、Word和PowerPoint等应用程序的用…

chatgpt赋能python:Python如何删除空白

Python 如何删除空白 在SEO优化过程中&#xff0c;我们需要保证我们的网页内容的质量和可读性。其中&#xff0c;一个重要的因素是删除空白。在Python中&#xff0c;我们可以使用多种方法来删除空白&#xff0c;下面我们将介绍一些方法并讨论它们的优缺点。 方法一&#xff1…

操作系统复习4.2.0-磁盘组织和管理

磁盘的结构 磁盘、磁道、扇区 磁盘划分n圈磁道&#xff0c;每条磁道划分为多个扇区 磁盘读写 磁头移动到需要读写的扇区所在的磁道来完成读写 磁盘转起来让目标扇区在磁头下面划过 盘面和柱面 分类 按磁头分类&#xff1a;磁头可伸缩移动、不可伸缩移动(同一盘面上有多个…

chatgpt赋能python:Python加入Path的好处及操作方法

Python加入Path的好处及操作方法 什么是Path&#xff1f; Path&#xff0c;顾名思义就是文件路径的意思。每当我们需要执行某些程序或打开某个文件&#xff0c;电脑都会按照这个文件路径来查找需要的文件或程序。在Windows系统中&#xff0c;文件路径是由一连串的路径名组成的…

DiffRate详解:高效Vision Transformers的可微压缩率

DiffRate详解&#xff1a;高效Vision Transformers的可微压缩率 0. 引言1. 相关内容介绍1.1 Transformer Block1.2 令牌修剪和合并1.3 修剪和合并的统一 2 DiffRate中的创新点2.1 令牌排序2.2 压缩率重参数化2.3 训练目标 3. 算法流程4. 总结 0. 引言 就当前的Vision Transfor…

决策树分类算法

#CSDN AI写作助手创作测评 目录 ID3算法 1.算法原理 2.代码实现 3.ID3算法的优缺点分析 C4.5算法 1.原理 2.优缺点 心得感受 决策树表示方法是应用最广泛的逻辑方法之一&#xff0c;它从一组无次序、无规则的事例中推理出决策树表示形式的分类规则。在决策树的内部…

Vue+springboot医院住院挂号登记收费系统7ui9s

医院信息管理系统的开发过程中&#xff0c;采用B / S架构&#xff0c;主要使用java语言进行开发&#xff0c;结合最新流行的springboot框架。使用Mysql数据库和idea开发环境。该医院信息管理系统包括用户、医生和管理员。其主要功能包括用户管理、医生管理、医生信息管理、预约…

chatgpt赋能python:Python删除非字母的SEO文章

Python删除非字母的SEO文章 Python是一个功能强大的编程语言&#xff0c;广泛应用于各类领域&#xff0c;包括搜索引擎优化&#xff08;SEO&#xff09;。在进行SEO优化时&#xff0c;有时需要从文本中删除非字母字符。这可以用Python快速高效地完成。本文将介绍如何使用Pytho…