C++深度解析教程笔记7

news2024/12/23 3:44:09

C++深度解析教程笔记7

  • 第13课 - 进阶面向对象(上)
    • 类和对象
    • 小结
  • 第14课 - 进阶面向对象(下)
    • 类之间的基本关系
      • 继承
      • 组合
    • 类的表示法
    • 实验-类的继承
  • 第15课 - 类与封装的概念
    • 实验-定义访问级别
      • cmd
    • 实验
    • 小结
  • 第16课 - 类的真正形态
    • 实验-struct&class
    • 实验-operator类的实现
    • 小结

本文学习自狄泰软件学院 唐佐林老师的 C++深度解析教程,图片全部来源于课程PPT,仅用于个人学习记录

第13课 - 进阶面向对象(上)

类和对象

类和对象是面向对象中的两个基本概念
类:指的是一类事物,是一个抽象的概念
对象:指的是属于某个类的具体实体
类是一种模型,这种模型可以创建出不同的对象实体
对象实体是类模型的一个具体实例

在这里插入图片描述

小结

每个类可以有多个对象
每个对象必然属于某个类

第14课 - 进阶面向对象(下)

类之间的基本关系

继承

从已存在类细分出来的类和原类之间具有继承关系(is a)
继承的类(子类)拥有原类(父类)的所有属性和行为
如下图:子类是惠普电脑和苹果电脑;父类是电脑

惠普电脑
电脑
苹果电脑

组合

一些类的存在必须依赖于其他类的关系叫组合
组合的类在某一个局部上由其他的类组成

如下图:

电脑
硬盘
CPU
内存
主板

类的表示法

在这里插入图片描述
利用继承简化重复的属性和行为

在这里插入图片描述
利用结构体、变量和函数描述

在这里插入图片描述

实验-类的继承

#include <stdio.h>

struct Biology {
    bool living;
};

struct Animal : Biology {
    bool movable;
    void findFood() { }
};

struct Plant : Biology {
    bool growable;
};

struct Beast : Animal {
    void sleep() { }
};

struct Human : Animal {
    void sleep() { }
    void work() { }
};


int main()
{
    return 0;
}

在这里插入图片描述

第15课 - 类与封装的概念

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验-定义访问级别

#include <stdio.h>

#include <stdio.h>

struct Biology 
{
    bool living;
};

struct Animal : Biology 
{
    bool movable;
    
    void findFood()
    { 
    }
};

struct Plant : Biology 
{
    bool growable;
};

struct Beast : Animal 
{
    void sleep() 
    { 
    }
};

struct Human : Animal 
{
    void sleep() 
    { 
        printf("I'm sleeping...\n");
    }
    
    void work() 
    { 
        printf("I'm working...\n");
    }
};

struct Girl : Human
{
private:
    int age;
    int weight;
public:
    void print()
    {
        age = 22;
        weight = 48;
        
        printf("I'm a girl, I'm %d years old.\n", age);
        printf("My weight is %d kg.\n", weight);
    }
};

struct Boy : Human
{
private:
    int height;
    int salary;
public:
    int age;
    int weight;

    void print()
    {
        height = 175;
        salary = 9000;
        
        printf("I'm a boy, my height is %d cm.\n", height);
        printf("My salary is %d RMB.\n", salary);
    }    
};

int main()
{
    Girl g;
    Boy b;
   // g.age=10;// error: 'int Girl::age' is private within this context
    
    g.print();
    
    b.age = 19;
    b.weight = 120;
    //b.height = 180;// error: 'int Boy::height' is private within this context
    
    b.print();
    
    return 0;
}

cmd

E:\test>g++ 15-1.cpp

E:\test>a
I'm a girl, I'm 22 years old.
My weight is 48 kg.
I'm a boy, my height is 175 cm.
My salary is 9000 RMB.

在这里插入图片描述

实验

#include <stdio.h>

int i = 1;

struct Test
{
private://私有的,只允许类内部访问
    int i;

public:
    int j;
        
    int getI()
    {
        i = 3;
        
        return i;
    }
};

int main()
{
    int i = 2;
    
    Test test;
    
    test.j = 4;
    
    printf("i = %d\n", i);              // i = 2;
    printf("::i = %d\n", ::i);          // ::i = 1;
    //printf("test.i = %d\n", test.i);    // Error  error: 'int Test::i' is private within this context
    printf("test.j = %d\n", test.j);    // test.j = 4
    printf("test.getI() = %d\n", test.getI());  // test.getI() = 3
    
    return 0;
}
/*
i = 2
::i = 1
test.j = 4
test.getI() = 3

*/

小结

在这里插入图片描述

第16课 - 类的真正形态

在这里插入图片描述
在这里插入图片描述

实验-struct&class

#include <stdio.h>

struct A
{
    // defualt to public
    int i;
    // defualt to public
    int getI()
    {
        return i;
    }
};

class B
{
    // defualt to private
    int i;
    // defualt to private
    int getI()
    {
        return i;
    }
};

int main()
{
    A a;
    B b;
    
    a.i = 4;
    
    printf("a.getI() = %d\n", a.getI());
    
   // b.i = 4;//error: 'int B::i' is private within this context
    
    //printf("b.getI() = %d\n", b.getI());// error: 'int B::getI()' is private within this context
    
    return 0;
}
/*
E:\test>g++ 16-1.cpp

E:\test>a
a.getI() = 4
*/

在这里插入图片描述
在这里插入图片描述

实验-operator类的实现

//operator.h
#ifndef _OPERATOR_H_
#define _OPERATOR_H_
class Operator
{
private:
	char mc;
	double mp0;
	double mp1;
public:
	bool setOperator(char op);
	void setParameter(double p0,double p1);
    bool result(double& r);


};


#endif

//operator.c
#include "operator.h"
bool Operator::setOperator(char op){
    bool ret = false;

    if( (op == '+') || (op == '-') || (op == '*') || (op == '/') )
    {
        ret = true;
        mc = op;
    }
    else
    {
        mc = '\0';
    }

    return ret;

//    bool res=false;
//    operator_cla::mc=mmc;
//    res=true;
//    return res;
}
void Operator::setParameter(double p0,double p1)
{

    Operator::mp0=p0;
    Operator::mp1=p1;
}
bool Operator::result(double& r)
{
    bool res=false;
    switch(mc)
    {
        case '+':
            r=Operator::mp0+Operator::mp1;
            res=true;
            break;
        case '-':
            r=Operator::mp0-Operator::mp1;
            res=true;
            break;
        case '*':
            r=Operator::mp0*Operator::mp1;
            res=true;
            break;
        case '/':
            if(Operator::mp1>-0.000000001&&Operator::mp1<0.000000001)
            {
                //break;
            }
            else{
                    r=Operator::mp0/Operator::mp1;
                    res=true;

            }

            break;
    }
    return res;

}

//main.c
#include <stdio.h>
#include "operator.h"

int main()
{
    double r=0;
    Operator op;
    op.setOperator('+');
    op.setParameter(3.5,6);
    if(op.result(r))
    {
        printf("3.5+6=%f\n",r);
    }
    op.setOperator('-');
    op.setParameter(3.5,6);
    if(op.result(r))
    {
        printf("3.5-6=%f\n",r);
    }
    op.setOperator('/');
    op.setParameter(3.5,0);
    if(op.result(r))
    {
        printf("3.5/0=%f\n",r);
    }
    else{
        printf("3.5/0 calculate error\n");
    }





    return 0;
}
/*
3.5+6=9.500000
3.5-6=-2.500000
3.5/0 calculate error
*/

小结

在这里插入图片描述

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

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

相关文章

链表经典面试题上

目录 创作不易&#xff0c;如若对您有帮助&#xff0c;还望三连&#xff0c;谢谢&#xff01;&#xff01;&#xff01; 题目一&#xff1a;203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 题目二&#xff1a;206. 反转链表 - 力扣&#xff08;LeetCode&#xff…

攻防世界XCTF-WEB入门12题解题报告

WEB入门题比较适合信息安全专业大一学生&#xff0c;难度低上手快&#xff0c;套路基本都一样 需要掌握&#xff1a; 基本的PHP、Python、JS语法基本的代理BurpSuite使用基本的HTTP请求交互过程基本的安全知识&#xff08;Owasp top10&#xff09; 先人一步&#xff0c;掌握W…

EasyExcel 处理 Excel

序言 本文介绍在日常的开发中&#xff0c;如何使用 EasyExcel 高效处理 Excel。 一、EasyExcel 是什么 EasyExcel 是阿里巴巴开源的一个 Java Excel 操作类库&#xff0c;它基于 Apache POI 封装了简单易用的 API&#xff0c;使得我们能够方便地读取、写入 Excel 文件。Easy…

力扣数据库题库学习(4.28日)--1581.进店却未进行过交易的顾客

1581. 进店却未进行过交易的顾客 问题链接 思路分析 有一些顾客可能光顾了购物中心但没有进行交易。请你编写一个解决方案&#xff0c;来查找这些顾客的 ID &#xff0c;以及他们只光顾不交易的次数。返回以 任何顺序 排序的结果表。 要求&#xff1a; 获取只浏览不消费的…

MySQL-笔记-08.数据库编程

目录 8.1 编程基础 8.1.1 基本语法 8.1.2 运算符与表达式 1. 标识符 2. 常量 &#xff08;1&#xff09; 字符串常量 &#xff08;2&#xff09;日期时间常量 &#xff08;3&#xff09;数值常量 &#xff08;4&#xff09;布尔值常量 &#xff08;5&#xff09;NULL…

深度学习:基于Keras,使用长短期记忆人工神经网络模型(LSTM)对股票市场进行预测分析

前言 系列专栏&#xff1a;机器学习&#xff1a;高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目&#xff0c;每个项目都处理一组不同的问题&#xff0c;包括监督和无监督学习、分类、回归和聚类&#xff0c;而且涉及创建深度学…

百度网盘上的资料怎么打印出来?

百度网盘是一种云端存储服务&#xff0c;许多人选择将工作和学习相关的资料存储在百度网盘中&#xff0c;以便在需要时方便使用。要将百度网盘上的资料打印出来&#xff0c;实际上有多种方法。例如&#xff0c;您可以将百度网盘中的资料下载到本地&#xff0c;然后前往打印店进…

结合创新!频域+时间序列,预测误差降低64.7%

频域时间序列不仅能提供更丰富的信息&#xff0c;还能提高模型性能和预测准确性。对于论文er来说&#xff0c;是个可发挥空间大、可挖掘创新点多的研究方向。 具体来说&#xff1a; 通过将复杂的时间序列数据转换成简单的频率成分&#xff0c;我们可以更容易地捕捉到数据的周期…

贪心算法 Greedy Algorithm

1) 贪心例子 称之为贪心算法或贪婪算法&#xff0c;核心思想是 将寻找最优解的问题分为若干个步骤 每一步骤都采用贪心原则&#xff0c;选取当前最优解 因为没有考虑所有可能&#xff0c;局部最优的堆叠不一定让最终解最优 v2已经不会更新v3因为v3更新过了 贪心算法是一种在…

MySQL 运维篇

回顾基本语句&#xff1a; 数据定义语言(DDL) 这类语言用于定义和修改数据库的结构&#xff0c;包括创建、删除和修改数据库、 表、视图和索引等对象。 主要的语句关键字包括 CREATE 、 DROP 、 ALTER 、 RENAME 、 TRUNCATE 等。 create database 数据库 &#xff1b; cr…

在vue3项目中设置错误路径的统一跳转

在我们前端开发过程中&#xff0c;如果&#xff0c;访问到了错误的或者不存在的路径&#xff0c;那么会直接出现空白。在一个完整的项目中&#xff0c;应该给用户一些友好的提示&#xff0c;显示他访问到了错误的页面。 我们可以专门的创建一个错误界面的.vue文件&#xff0c;…

.360勒索病毒的威胁:如何恢复您的数据?

引言&#xff1a; 近年来&#xff0c;网络安全威胁层出不穷&#xff0c;其中.360勒索病毒以其独特的攻击方式和广泛的传播能力&#xff0c;成为了众多企业和个人面临的重大挑战。本文将对.360勒索病毒进行深入剖析&#xff0c;并探讨应对此类病毒的有效策略&#xff0c;以帮助…

编译器优化之内存对齐

编译器优化之内存对齐 前言 在工作中&#xff0c;做性能优化&#xff0c;无意间看到反汇编中有nop指令&#xff0c;大致能猜测是内存对齐相关优化&#xff0c;但不清楚相关优化选项&#xff0c;编来了兴趣&#xff0c;对编译器的内存对齐优化进行一次系统的学习和总结 由于我编…

手撕netty源码(四)- ServerBootstrap是如何监听事件的

文章目录 前言一、OP_ACCEPT事件注册1.1 bind 完成之后监听OP_ACCEPT1.2 register0注册完成之后监听OP_ACCEPT 二、事件处理在这里插入图片描述 三、总结 前言 文档中的图片如果不清晰可以直接在线看processOn processOn文档跳转 接上一篇&#xff1a;手撕netty源码&#xff0…

OceanBase开发者大会实录-陈文光:AI时代需要怎样的数据处理技术?

本文来自2024 OceanBase开发者大会&#xff0c;清华大学教授、蚂蚁技术研究院院长陈文光的演讲实录—《AI 时代的数据处理技术》。完整视频回看&#xff0c;请点击这里&#xff1e;> 大家好&#xff0c;我是清华大学、蚂蚁技术研究院陈文光&#xff0c;今天为大家带来《AI 时…

MathType如何使用LaTex代码编辑公式?MathType使用LaTex代码编辑公式教程 mathtype高仿latex

MathType专为解决数学公式输入问题打造&#xff0c;内置有自定义函数识别、国际性字符输入、拖放表达式、标签命名等丰富的功能&#xff0c;下面就来看看如何使用LaTex代码编辑公式吧。 MathType使用LaTex代码编辑公式教程 第一步&#xff1a;首先打开软件&#xff0c;并准备…

WebStorm2024版 将项目上传到gitee

目录 一、准备 WebStorm gitee 二、上传代码到Gitee 三、过程中遇到的问题 报错&#xff1a;You may want to first integrate the remote changes (e.g., git pull ...) before pushing again. 报错&#xff1a;fatal: refusing to merge unrelated histories 报错&a…

鲲鹏华为云--OBS

文章目录 1.创建桶2.上传对象3.下载对象4.分享对象5. 删除对象6.删除桶 1.创建桶 创建桶 2.上传对象 点击创建的桶–“上传对象” 拖拽本地文件或文件夹至“上传对象”区域框内添加待上传的文件。 也可以通过单击“上传对象”区域框内的“添加文件”&#xff0c;选择本地…

【SQL每日一练】统计复旦用户8月练题情况

文章目录 题目一、分析二、题解1.使用case...when..then2.使用if 题目 现在运营想要了解复旦大学的每个用户在8月份练习的总题目数和回答正确的题目数情况&#xff0c;请取出相应明细数据&#xff0c;对于在8月份没有练习过的用户&#xff0c;答题数结果返回0. 示例代码&am…

手撕C语言题典——合并两个有序数组(顺序表)

搭配食用更佳哦~~ 数据结构之顺顺顺——顺序表-CSDN博客 数据结构之顺序表的基本操作-CSDN博客 继续来做一下关于顺序表的经典算法题叭~ 前言 88. 合并两个有序数组 - 力扣&#xff08;LeetCode&#xff09; 合并数组也是力扣上关于顺序表的一道简单题&#xff0c;继续来加深…