【浙江大学 C++ 翁恺老师】学习笔记P1-P9

浙江大学 C++ 翁恺老师 B站视频链接

2 什么是面向对象

对象=属性(是什么)+服务(提供什么)
请添加图片描述

面向过程:按照时间顺序,一步步发生什么样的事情。

面向对象:场景中存在什么东西object,东西间的关系如何。

以上课为例:略。

以程序为例:C的struct中只有数据,C++的class中有数据和操作。

请添加图片描述

什么是面向对象:是一种分析思路和代码实现的方法。重点是关注问题领域中存在什么物件,而不是整个流程。

3 面向对象基本原理

对象间通过发送和接受消息来行动。(不要伸手直接操纵”蛋黄“)

消息:由发送方撰写,由接收方分析,通过方法来实现。消息可能导致接收方更改状态返回结果

东西Object:具体到某一个实体

类Class:某一类实体的集合,是一种概念

请添加图片描述

面向对象的五条原则:

  1. 所有东西都是对象。
  2. 程序是一个通过发送消息的方式,告诉彼此应该做什么what to do的对象集合。
  3. 每一个对象有由其他对象组成的内存。
  4. 每一个对象有一个类型
  5. 一个特定类型的所有的对象都可以接收相同的消息

接口Interface的作用:交流和保护。

内部的隐藏:让类的创造者更改类的内部,而让类的使用者远离类的内部

面向对象的三大原则

  1. 封装Encapsulation
    1. 数据和处理这些数据的方法捆绑在一个对象中
    2. 隐藏数据和操作的详细信息
    3. 限制公开方法的访问
  2. 继承
  3. 多态性

4 自动售票机例子

请添加图片描述

  1. 直接创建TicketMachine的类自动生成相应的**.h头文件.cpp文件**。
    1. h头文件:声明类。
#ifndef TICKETMACHINE_H_ //如果这个头文件没有被包含
#define TICKETMACHINE_H_ //就包含这个头文件并且定义这个变量

class TicketMachine {
public:
    TicketMachine(): //构造函数
    virtual ~TicketMachine(); //析构函数
    void showPrompt();
    void insertMoney(int money);
    void showBalance();
    void printTicket();
    void showTotal();
private:
    const int PRICE;
    int balance;
    int total;
};

#endif /* TICKETMACHINE_H_ */
  1. cpp文件:先#include TicketMachine.h,再定义头文件中声明的类的实体
#include "TicketMachine.h";

#include <iostream>
using namespace std;

TicketMachine::TicketMachine() : PRICE(0) {
}

TicketMachine::~TicketMachine() {
}

void TicketMachine::showPrompt() {
    cout << "something";
}

void TicketMachine::insertMoney(int money) {
    balance += money;
}

void TicketMachine::showBalance() {
    cout << balance;
}

void TicketMachine::printTicket() {
    cout << "Ticket";
}

void TicketMachine::showTotal() {
    cout << total;
}
  1. 再手动创建一个main.cpp进行类的调用,需要#include TicketMachine.h。
#include "TicketMachine.h";

int main() {
    TicketMachine tm;
    tm.insertMoney(100);
    tm.showBalance();
    
    return 0;
}

::域的解析符:表示范围。

<Class Name>::<function name> //某个域内的函数
::<function name> //全局的函数

5 头文件

区分声明declaration(存放在头文件中)定义definition(存放在cpp文件中)

C/C++程序的编译运行过程:

  1. 预处理指令生成.i文件
    1. 头文件的包含
    2. 删除所有#define并替换所有的宏和标识符常量;
    3. 删除所有条件编译指令和注释。
  2. 编译器生成.s文件
    1. 词法分析、语法分析、语义分析、符号汇总以及后续优化产生相应的汇编语言
  3. 汇编器生成.o文件
    1. 将汇编语言转化为二进制指令
  4. 链接器生成.out文件
    1. 进行合并段表和符号汇总两个操作从而形成一个可执行程序
    2. 链接是机器可以检查出变量/函数是否定义的一步
  • 在windows系统中,文件的变化:.c -> .obj -> .exe(编译的三步一般一步到位)
  • 在linux系统中,文件的变化:.c -> .i ->.s -> .o -> .out

请添加图片描述

#include “xx.h”:首先在当前目录寻找

#include <xx.h>:在系统指定目录寻找

#include :同上

6 时钟的例子

抽象Abstraction:是指忽略部分细节,将注意力集中在更高层次的问题上的能力。

模块化Modularization:是将一个整体划分为定义明确的部分的过程。这些部分可以单独构建和检查,并且以定义明确的方式相互作用。

class ClockDisplay {
    NumberDisplay hours;
    NumberDisplay minutes;
}
class NumberDisplay {
    int limit;
    int value;
}

7&8 成员变量

成员变量fileds:在一个函数内部定义的变量,值与函数无关,作用域在类的内部

本地变量local variables:值与函数有关,作用域在函数的内部,存放在堆栈中。

函数参数parameters:同上。

同名时:则按照“就近原则”。

this是C++的关键字,是一个指针,类型是这个函数所属的类的对象的类型

请添加图片描述

9 构造和析构

Visual Studio中编译时分为Release和Debug模式,其中Debug模式包含了调试信息和安全检查,未初始化的栈空间用0xCC填充,而未初始化的堆空间用0xCD填充,而0xCCCC和0xCDCD在中文GB2312编码中分别对应“烫”字和“屯”字。

构造函数:在对象被创建时自动调用(可传入参数对其初始化)。

目的是保证对象一旦被创建就被初试化。

class X {
public:
    X();
}

析构函数:在对象被消除时自动调用(不能含参数)。

目的是释放空间和资源。

class Y {
public:
    ~Y();
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
浙江大学翁恺C语言课件是浙江大学计算机学院教授翁恺编写的一套C语言课程教材。这套课件主要用于C语言的教学与学习,内容包括基本语法、数据类型、运算符、流程控制、函数、指针、数组、字符串等C语言的基础知识。 这套课件具有以下几个特点。首先,它简单易懂,适合初学者学习翁恺老师针对C语言的特点和学习难点,将知识点进行了简洁明了的讲解,同时结合了大量的示例和练习,帮助学生更好地理解和掌握C语言的编程思路和技巧。 其次,课件内容丰富全面。翁恺老师在编写课件时,充分考虑到C语言的广泛应用领域和学生的学习需求,涵盖了C语言的各个方面,包括基础语法、程序设计、算法、数据结构等内容,帮助学生建立正确的编程思维和解决实际问题的能力。 再次,课件设计灵活多样。为了培养学生的动手实践能力,课件中设计了丰富的编程实例和实践项目,学生可以边学边练,不断巩固和提高自己的编程能力。此外,课件中还包含了一些扩展知识,如文件操作、动态内存管理等,有助于学生进一步拓宽视野。 总之,浙江大学翁恺C语言课件是一套权威且实用的C语言学习资料,通过学习这套课件,学生可以系统地学习和掌握C语言的基础知识,提高编程能力,并为日后的学习和工作打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值