C++初学(5)
C++继承面向对象一个重要概念:继承,继承可以使我们依据另一个类来定义一个类;当我们创建一个类时无需编写新的数据成员和成员函数,已有类称为基类,新建的类称为派生类。
12345678class animal{ //eat() //sleep()};class dog : public animal{ //bark()};
一个类可以派生自多个类,也就是说可以从多个基类继承数据和函数,定义一个派生类使用一个派生类列表来指定基类。
12345678910111213141516171819202122232425262728293031#include <iostream>using namespace std;class shape{ public: void setwidth(int w){ width = w; } void setheight(int h){ height = h; } ...
C++初学(4)
本篇详细学习类和对象相关的知识,类是C++的核心属性,主要用于指定对象的形式,封装了数据和函数的组合。
C++类的定义定义类需要使用关键字class,主体在{}中,包含了成员变量和成员函数:
1234567class classname{ Access specifiers: //访问修饰符public、private、protected Date members/variables; Member functions(){ }};
访问修饰符:确定类成员的访问属性,在类对象作用域内,公共成员在类外部是可以访问的;
123456class Box{ public: double length; double breadth; double height;};
C++定义对象12Box Box1;Box Box2;
对象Box1和Box2都有各自的数据成员,类的对象的公共数据成员可以直接使用成员访问运算符.来访问。
123456789101112 ...
C++初学(3)
基础概念以及和C有区别的部分在(1)、(2)都进行了学习,下面花一些篇幅梳理细碎的知识点。
C++数字数字定义很简单,使用原始的数据类型定义即可。
C++数字运算C++中的数学运算,都写在标准C和C++库中,叫做内置函数,若是需要使用这些内置函数,需要引用对应的头文件。
C++随机数在许多情况下需要生成随机数,主要函数是rand(),生成一个伪随机数,生成随机数之前需要先调用一下srand()函数。
C++数组数组其实在C中用的很多,并不陌生,可以存储一个固定大小的顺序集合,数组一般是由连续的内存位置组成,最低的地址对应第一个元素,最高的地址对应最后一个元素。
数组的声明和C一致,类型 数组名[number]。
数组的初始化:可以使用一个初始化语句,或者省略掉数组的大小,若是选择省略,数组的大小就是初始化时数组的大小。
访问数组数组元素可以通过数组名称加索引进行访问,索引一般放在方括号内,跟在数组的后边。
C++中的数组是非常重要的,下面是一些数组的重要概念:
多维数组:最简单的形式是二维数组。
指向数组的指针:通过指定不带索引的数组名称来生成指向数组第一个元素的指针。
传递数组给函数 ...
C++初学(2)
C++变量类型变量类型其实不用过多阐述,和数据类型相似,变量仅仅是可操作存储区的名称而已,C++还有其他类型的变量,如枚举、引用、数据结构和类等。
枚举类型:enum,用于定义一组命名的整数常量。
变量声明声明是向编译器保证变量是按照给定的类型和名称而存在,声明只有在编译时才有意义,声明和定义是不同的概念,声明可以多次,而变量的定义只有一次;多个文件且只有一个文件定义变量,变量的声明就显得非常有用,使用extern关键字在任意一个地方声明一个变量。
extern 的用法:
1234567891011extern int i; //声明,不是定义int i; //声明,也是定义,未初始化//1.extern告诉编译器变量在其他地方被定义extern double pi = 3.1415926; //定义,声明加上初始化被当作定义,即使加了extern//2.带初始化的声明必定是定义,当extern在函数外部时,才可以被初始化extern double max(double a, double b); //声明//3.函数的定义和声明就比较简单,{}是定义,否则就是声明 ...
C++初学(1)
我经过前期项目的学习和锻炼,现在开始准备学习C++相关的内容,也是为了之后的面试准备内容,C++相较于C语言来说,其实增加的只是几个特性而已,封装、继承、多态;以及C++其实是面向对象的语言,在接触过C#之后对类、对象的概念有了初步的理解,但还不够深刻,希望通过C++的学习可以加深对面向对象编程的理解和使用。
面向对象编程三大核心概念封装封装就是将数据(属性)和操作数据的方法(代码)绑定在一起,并隐藏对象的内部实现细节,仅仅暴露必要的接口(方法或者叫函数)给外界使用,确保数据的安全性和可靠性。
封装主要是通过private、public、protected来实现,下面是一个Person类的示例:
12345678910111213141516171819202122232425262728293031323334353637383940#include <iostream>#include <string>class Person {private: // 私有属性 std::string name; int age;public: ...
嵌入式开发-Linux
在进入裸机开发之前,先复习了一些 linux 的基础知识,我们一般使用 ubuntu 的系统,在开发中我们一般在 vmware 虚拟机下进行,主要使用Linux系统进行编译的操作。
一开始只要将 vmware 和 ubuntu 的镜像文件安装好能运行即可,基本上在百度完成,在U盘的连接到虚拟机可以快速切换,之前并不知道。
我们可以先在 vmware 中的编辑 -> 首选项中进行 USB设备插入时的选择,一般默认是我们自行选择,一般是连接到主机。我们可以在系统下面进行选择。
Linux 终端操作和shell 命令复习一些命令:
目录查看:ls
目录切换:cd
当前路径显示:pwd
系统信息查看:uname
清理屏幕命令:clear
显示文件内容:cat
切换用户身份:sudo
文件拷贝:cp
移动文件(重命名):mv
创建文件夹:mkdir
创建文件:touch
删除命令:rm
目录删除:rmdir
显示网络配置:ifconfig
重启:reboot
关机:poweroff
系统帮助:man
数据同步写入磁盘:sync
查找文件:find
查找内容:grep(字符串这类)
文件夹 ...
嵌入式开发-电路知识补充
在复习 stm32 的过程中,在推挽、开漏输出这里碰到一些电路上的问题,所以又花费了几天时间去温习了一遍电路和模电的知识来补充。
首先问题是出在了推挽输出的一张图上:
推挽输出的简易电路原理图
深刻理解GPIO(上拉输入、下拉输入、模拟输入、浮空输入,开漏输出,推挽输出的区别,以STM32为例)_下拉输出-CSDN博客
在这篇博客中,说输出高电平,P-MOS管导通,N-MOS管截止,输出低电平,P-MOS截止,N-MOS管导通;但查阅资料显示P-MOS管应当是低电平导通,后来在正点原子的讲解视频中得到答案,是因为输出控制电路中有一个反相器进行了高低电平的转换达到这个效果。
那么为什么是上P下N,这是因为 N-MOS管导通之后,ds之间的电阻非常的小,若是作为上管,那么会导致 s 点的电压升高,为了维持导通,栅极 d 就需要再加上阈值电压,这显然是做不到的;而P-MOS管是低电平导通,加上阈值电压也在可承受的范围之内,所以一般会使用 P-MOS管作为上管作为电源开关,而N-MOS管作为下管接地控制。
【知识】既然有了nmos 为啥还要pmos_哔哩哔哩_bilibili
...
嵌入式开发-stm32
在完成对C语言复习了之后,也开始进入正题——stm32的开发和学习。
stm32介绍本人使用的是普中的开发板,开发平台是Keil 5,核心是Cortex 4 的内核,当然这个板子也自带了F1的芯片,如下:
在开发之前首先要对这块开发板进行一定的了解,在学习资料中最重要的就是数据手册、中文参考手册、开发板原理图。
数据手册主要能对存储器的映射进行查看,而中文参考手册则是对各个外设的具体控制的数据位的操作和功能,开发版原理图则是对应外设和F4芯片的引脚的连接情况。在熟悉了这三个手册之后,我们就对硬件层面有了初步的了解,接下来才能对相应的功能进行裸机开发。
在初步学习之后,我们了解到开发板最底层其实就是使用寄存器进行输入和输出,由芯片完成对应的程序执行。
寄存器和存储器其实这两个光看名字其实都是存储数据的容器,但是在实际应用当中还是有所区分:
存储器:存放指令和数据的地方,由CPU直接进行存取。
寄存器:进行对存储的数据进行算术和逻辑运算;存储于其中的地址则是指向内存的某个位置读写进周边设备。
其中还需要了解的就是存储器映射和寄存器映射。
存储器映射:给存储器分配地址的过程。
寄存器映射 ...
企业实践-Studio 5000
今年的 7 月 17 日,开始进入中化学装备科技集团公司开始为期两年的实习,实习已过三月,在这里总结一些关于 Studio 5000 的学习心得(本人负责的主要是橡胶缠绕机的下位机控制系统的开发),公司用的最多的就是 Rockwell 的PLC,所以软件主要是基于 Studio 5000为主。
C语言浅学-字符串和字符串函数
在结束了数组和指针的学习之后,将要学习的是上篇博客结尾关于字符串的相关内容,主要是创建并使用字符串,熟悉C库中的字符和字符串函数,包括去创建一个自定义的字符串函数等内容
表示字符串和字符串I/O在前面的博客中我们也有介绍,字符串是以空字符(\0)结尾的 char 类型数组,因此我们可以将上一章中关于数组的指针的部分知识运用到字符串之中,由于字符串十分的常用,所以C库中还是提供了许多用于处理字符串的函数。
实例:
123456789101112131415#include <stdio.h>#define MSG "I am a symbolic string constant!" //字符串常量的定义方式#define MAXLENGTH 81int main(void){ char words[MAXLENGTH] = "I am a string in an array!"; //char类型数组 const char *p1 = "Something is pointing me. ...