IE盒子

搜索
查看: 135|回复: 1

C++速成教程——第一讲

[复制链接]

2

主题

9

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2023-1-15 20:03:26 | 显示全部楼层 |阅读模式
本教程共9讲,为笔者的课程学习笔记。有C语言基础的会更好理解哦!
这一讲有关于C++作为高级语言——面向对象特点的讲解,是C++全部内容的最基础的基础!理解好这一部分对于理解C++语言并使用C++有着重要的意义。
第一讲 面向对象编程基础1

基础概念:

面向对象的语言特点:

▫ 将客观事物看作具有属性和行为的对象。
▫ 通过抽象找出同一类对象的共同属性和行为,形成类。
▫ 通过类的继承与多态实现代码重用。
对象:

▫ 是系统中用来描述客观事物的一个实体,它是用来构成系统的一个基本单位。对象由一组属性和一组行为构成。
▫ 属性:用来描述对象静态特征的数据项。
▫ 行为:用来描述对象动态特征的操作序列。
类:

▫ 具有相同属性和服务的一组对象的集合。
▫ 为属于该类的全部对象提供了抽象的描述,包括属性和行为两个主要部分。
类与对象的关系:

▫ 一个属于某类的对象称为该类的一个实例。

继承:

▫ 特殊类的对象拥有其一般类的全部属性与行为,称作特殊类对一般类的继承。对于软件复用有着重要意义。
多态性:

▫ 多态是指在一般类中定义的属性或行为,被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或行为在一般类及其各个特殊类中具有不同的语义。
1 C++基础语法

1.1最简单的C++程序


  • Hello World



  • C++不仅兼容C的语法,也兼容C的标准库头文件。



  • C++中的标准IO流
cin代替scanf,cout代替printf


与C语言相比,C++中的cin、cout无需类型说明符%d和取地址符&。cin与cout的操作符方向相反。
C++程序的一般结构

• 首先包含适当的头文件,本节课用到了<iostream>,后面还会介绍其他的头文件
• 然后是固定的using namespace std;
• 类和函数的声明等(与C语言相同)
• main函数体(与C语言相同)
2 C++中的类

2.1类的概念


  • 类是有成员函数的结构体
属性:成员变量
行为:成员函数

  • 结构体变量在C++中称为对象
  • 类是抽象的,不占内存;对象是具体的,占用储存空间
  • 定义对象前要声明类
C++中声明一个类的格式为:

class 类名{
public:
数据成员;
函数成员;
};
//注意结束的分号


例题:
设计一个存储同学信息的类。
• 同学信息包括学号和姓名,因此有两个数据成员:id和name
• 信息应当可修改、可显示,因此还有两个函数成员:set和display


2.2 普通成员函数

2.2.1成员函数的定义


  • 类成员函数和面向过程的函数一样,也有返回值和函数类型
  • 成员函数可以访问本类中任何成员
  • 类内定义和类外定义
类外定义时要在类内留下接口

  • 类内定义:形式与一般函数相同
  • 类外定义:需要指明成员所属的类
返回值类型 类名::成员函数名(参数) {函数体}



2.2.2函数成员的调用方法

对象名.函数名(参数)
2.3 特殊函数成员:构造函数

2.3.1构造函数的定义


  • 类内定义:类名(参数){函数体}
  • 类外定义:类名::类名(参数){函数体}


2.3.2构造函数的特殊用法:以一对括号初始化数据成员


  • 类内定义:类名(参数):数据成员(参数){函数体}
  • 类外定义:类名::类名(参数):数据成员(参数){函数体}


在函数体之前,利用参数初始化数据成员与函数体内初始化等价


2.4 特殊函数成员:析构函数


  • 析构函数在对象生命期结束时被自动调用,与构造函数相反。
  • 析构函数的定义:
类名::~类名() {函数体} //函数体通常为空

  • 析构函数无返回值,无参数
  • 如果不主动定义析构函数,则系统自动生成默认析构函数,默认析构函数的函数体为空,什么都不做
  • 用途


  • 可以在函数体中打印对象信息,方便调试



  • 对于含有指针类型成员的类,析构函数用于释放指针指向的内存

  • 析构函数的调用顺序


st2先析构,st1后析构,与构造函数的顺序相反
2.5 特殊成员:静态成员

静态成员是类本身所有,类的对象共享的成员,可以是数据成员或函数成员。
2.5.1静态数据成员


  • 定义:


  • static 类型 成员名
  • 静态数据成员不通过构造函数初始化
  • 静态数据成员默认初始值为0,也可以手动赋初值

  • 静态数据成员的使用


  • 形式1:对象名.成员名
  • 形式2:类名::成员名

  • 对于Student类,我们可以使用静态数据成员n_student记录程序中的学生数


  • 在构造函数中,n_student自增
  • 在析构函数中,n_student自减


2.5.2静态函数成员


  • 定义


  • static 返回类型 函数名(参数)
  • 静态函数成员只能使用静态数据成员
  • 静态数据成员在类外定义时,不加static


3 命名空间(namespace)

3.1引入命名空间的必要性


  • 每个模块都有自己的命名空间,因而隔离了模块中的函数名、类名、对象名
  • 对于局部范围,利用using      namespace则可简化书写
  • C++标准库中的名字所在的命名空间为std
  • 因此我们需要using      namespace std;
  • 如果缺少上述语句,则cout需写为std::cout,string需写为std::string,以便指明名字的来源


3.2自定义命名空间


  • 对于大型程序,可以将其中的一个模块包装为一个命名空间,以避免名字冲突

回复

使用道具 举报

0

主题

6

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2025-6-6 16:55:31 | 显示全部楼层
没人回帖。。。我来个吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表