自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 再谈构造函数

构造函数体赋值在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值class Date{public: Date(int year, int month, int day) { _year = year; _month = month; _day = day; }private: int _year; int _month; int _day;};虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称作为类对象成员的初始化,构造函数体

2021-02-28 20:08:44 856

原创 const成员

const修饰类的成员函数将const修饰的类成员函数称之为const成员函数, const修饰类成员函数,实质修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。我们来看看下面的代码class Date{public: void Display() { cout << "Display()" << endl; cout << "year:" << _year << endl; cout &l

2021-02-28 10:59:16 676

原创 日期类的实现

class Date{public: //获取某年某月的天数 int GetMonthDay(int year, int month) { static int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int day = days[month]; if(month == 2 &&((year % 4 == 0 && year % 100 != 0) || (ye

2021-02-28 10:42:54 699

原创 赋值运算符重载

运算符重载C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。函数名字为:关键字operator后面接需要重载的运算符符号。函数原型:返回值类型operator操作符(参数列表)注意:1.不能通过连接其他符号来创建新的操作符:比如operator@2.重载操作符必须有一个类类型或者枚举类型的操作数3.用于内置类型的操作符,其含义不能改变,例如:内置类型+,不能改变其含义4.作为类成员的

2021-02-28 10:25:13 833

原创 拷贝构造函数

拷贝构造函数概念在现实生活中,可能存在一个与你一样的自己,我们称其为双胞胎。那在创建对象时,可否创建一个与该对象一样的新对象呢?拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。特征拷贝构造函数也是特殊的成员函数,其特征如下:1.拷贝构造函数是构造函数的一个重载形式。2.拷贝构造函数参数只有一个且必须使用引用传参,使用传值方式会引发无穷递归调用。class Date{public: Date(int

2021-02-28 00:15:46 711

原创 析构函数

析构函数概念前面通过构造函数的学习,我们知道一个对象是怎么来的,那一个对象又是怎么没的呢?析构函数:与构造函数功能相反,析构哈桑农户不是完成对象的销毁,局部对象下回工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成类的一些资源清理工作。特性析构函数是特殊的成员函数。其特征如下:1.析构函数名是在类名前加上字符~。2.无参数无返回值3.一个类有且只有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。4.对象生命周期结束时,C++编译系统自动调用析构函数typedef i

2021-02-27 23:34:09 856

原创 构造函数

类的6个默认成员函数如果一个类中声明成员都没有,简称为空类,空类中什么都没有吗?并不是的,任何一个类在我们不写的情况下,都会自动生成6个默认的成员函数。构造函数概念对于以下的日期类class Date{public: void SetDate(int year, int month, int day) { _year = year; _month = month; _day = day; } void Display() { cout << _year

2021-02-27 21:53:54 669

原创 this指针

this指针this指针的引出我们先来定义一个日期类Dateclass Date{public: void Display() { cout << _year << "-" << _month << "-" << _day << endl; } void SetDate(int year, int month ,int day) { _year = year; _month = month; _da

2021-02-25 22:20:44 655

原创 类对象模型&&结构体内存对齐规则

类对象模型如何计算类对象的大小class A{public: void PrintA { cout << _a << endl; }private: char _a;};问题:类中既可以有成员变量,也可以有成员函数,那么一个类的对象中包含了什么?如何计算一个类的大小?类对象的存储方式猜测对象中包含类的各个成员缺陷:每个对象中成员变量是不同的,但是调用同一份函数,如果按照此种方式存储,当一个类创建多个对象时,每个对象中都会保存一份代码,相同代码保存多次

2021-02-25 22:00:09 704

原创 类的作用域&&类的实例化

类的作用域**类定义了一个新的作用域,**类的所有成员在类的作用域中。在类体外定义成员,需要使用::作用域解析符指明成员属于哪个类域class Person{public: void PrintPersonInfo();private: char _name[20] ; char _gender[3]; int _age;};//这里需要指定PrintPersonInfo是属于Person这个类域void Person::PrintPersonInfo(){ cout <

2021-02-25 19:27:39 711

原创 类的访问限定符及封装

类的访问限定符及封装访问限定符C++实现封装的方式:用类将对象的属性和方法结合在一快,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用。【访问限定符说明】1.public修饰的成员在类外可以直接被访问2.protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)3.访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止4.class默认访问权限为private,struct为public(因为strcut

2021-02-25 19:21:51 1013

原创 类与对象

面向过程和面向对象初步认识C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。类的引入C语言中,结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数struct Student{ void SetStudentInfo(const char* name, const char* gender, int age) { strcpy(_name, nam

2021-02-25 18:50:20 1257

原创 CPP11新特性——指针空值nullptr

C++98中的指针空值在良好的C/C++编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现不可预料的错误,比如未初始化的指针。如果一个指针没有合法的指向,我们基本就是按照如下方式对其进行初始化:void TestPtr(){ int* p1 = NULL; int* p2 = 0; // ......}NULL实际是一个宏,在传统的C头文件(stdef.h)中,可以看到如下代码:#ifdef NULL#ifdef __cplusplus#define NULL

2021-02-24 16:46:26 1018

原创 CPP11新特性——基于范围的for循环

范围for的语法在C++98中如果要遍历一个数组,可以按照以下方式进行void TestFor(){ int array[] = { 1, 2, 3, 4, 5 }; for(int i = 0, i < sizeof(array) / sizeof(array[0]); ++i) array[i] += 2; for(int* p = 0, p < array + sizeof(array) / sizeof(array[0]); ++p) cout << *

2021-02-24 10:16:16 1477

原创 CPP11新特性——auto关键字

auto简介在早期C/C++中auto的含义是:使用auto 修饰的变量,是具有自动存储器的局部变量 ,但遗憾的是一直没有人去使用它。C++11中,标准委员会赋予了auto全新的含义:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。int TestAuto(){ return 10;}int main(){ int a = 10; auto b = a; auto c = 'a'; auto d = Test

2021-02-24 10:00:25 1894

原创 CPP-宏和内联函数

内联函数概念以inline修饰 的函数叫做内联函数,编译时 C++编译器会在调用内联函数的地方展开 ,没有函数压栈的开销,内联函数提升程序运行的效率如果在上述函数前增加inline关键字将改成内联函数,在编译期间编译器会用函数体替换函数的调用。查看方式:1.在release模式下,查看编译器生成的汇编代码中是否存在call Add2.在debug模式下,需要对编译器进行设置,否则不会展开(因为debug模式下,编译器默认不会对代码进行优化)特性1.inline是一种以空间换时间的做法,省

2021-02-23 19:01:49 835

原创 CPP-引用

引用引用的概念引用不是新定义一个变量,而是给已存在的

2021-02-23 15:27:37 976

原创 C++函数重载&神奇的extern “C“

函数重载函数重载的概念是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同,常用来处理实现功能类似数据类型不同的问题int Add(int left, int right){ return left + right;}double Add(double left, double right){ return left + right;}long Add(long left, long right)

2021-02-22 22:55:03 623

原创 C++基础——关键字&命名空间&IO&缺省参数

C++关键字C++总计63个关键字,C语言32个关键字命名空间命名空间的定义定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。namespace N{ //变量 //函数}//1.普通的命名空间namespace N1 //N1为命名空间的名称{ //命名空间中的内容,既可以定义变量,也可以定义函数 int a; int Add(int left, int right) { return left + r

2021-02-22 21:49:52 713

原创 计算机网络——传输层协议1

传输层: UDP协议,TCP协议传输层: 传输层是负责端与端(端点,进一步理解就是端口)之间的传输,不论是传输层当中的udp协议还是tcp协议,都是负责端口和端口之间的数据传输。“传输层只负责端口,不负责ip(ip是网络层在负责)”端口的划分:端口的范围(0~2^16)知名端口:0~1023http:80, https:443, ssh:22, ftp:21 telnet:23并不是说非知名端口就可以随意去使用了,常用软件在使用的端口mysql: 3306 oracle: 1521网络数据

2021-02-20 11:06:22 952

原创 计算机网络——socket_tcp&应用层协议

写代码的时候,先应该调用函数,其次再考虑用函数时该如何传参TCP编程流程监听:listen 发送数据:send 发起连接connect 接收数据:recv监听:int listen(int sockfd, int backlog);sockfd : 侦听套接字,socket函数的返回值backlog: 已完成连接队列的大小1.共识:当我们调用了listen函数之后,也就是告诉内核,当中程序可以接收新的连接了,换句话说,也就是可以完成三次握手的过程了:三次握手时网络协议栈完

2021-02-19 21:49:53 1092

原创 计算机网络——socket_udp

1.socket1.1 ip & port1.2 字节序大端字节序 & 小端字节序主机字节序 & 网络字节序1.3 tcp与udp协议的特点1.4 udp编程流程1.5 tcp编程流程单执行流的编程流程多进行的编程流程多线程的编程流程字节序1.字节序:CPU对内存的访问顺序小端字节序:低位放低地址大端字节序:地位放高地址**主机字节序:**指的是机器本身的字节序,如果是大端,则主机字节序就是大端,如果是小端,主机字节序就是小端**网络字节序:**规

2021-02-19 19:52:35 935

原创 计算机网络——网络基础

网络的发展背景协议**协议:**是国家或者外交事务的一种规范**协议:**沟通双方约定同一种语言来进行有效沟通**网络协议:**网络当中通信双方,采用同一种数据格式来进行有效通信**网络协议簇:**在网络当中不止一个协议,而是由很多个协议,我们将这些很多个协议称之为协议簇体系结构/参考模型: OSI参考模型,TCP/IP体系结构规定了协议完成的任务,以及协议的分层OSI参考模型 工业上并不常用,企业一般选择TCP/IP物数网传会表应物理层 数据链路层 网络层 传输层 会话层 表示层 应

2021-02-19 16:34:22 751

原创 操作系统——多线程(下)

posix版本的信号量信号量:本质:计数器 + PCB等待队列 + 一堆的接口(等待接口 + 唤醒接口)计数器: 本质是对资源的计数当执行流获取信号量成功之后,信号

2021-02-19 15:35:53 645

原创 操作系统——多线程(上)

思维:考虑多线程的问题的时候,需要有全局思维:(从程序的角度,去考虑多个线程在同一时间都可能做的事情)线程概念线程控制线程安全同步和互斥死锁生产者与消费者模型线程池线程概念![在这里插入图片描述](https://img-blog.csdnimg.cn/20210207163537948.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0

2021-02-19 10:15:25 834 2

原创 操作系统——信号

信号的概念信号的产生信号的注册信号的注销自定义信号处理方式信号的捕捉流程信号阻塞信号的概念:1.信号是一个软件中断2.信号的种类:kill -l命令的时候,我们会看到62种信号1~31 : 非可靠信号, 信号有可能会丢失34~64 : 可靠信号, 信号是不可能丢失的信号的产生 1.1 硬件产生 ctrl + c : SIGINT(2) 发送给前台进程 如何把一个进程放到后台去运行:在启动命令之后加 & 符号 fg:就将刚刚放到后台的进程,放到前台来运行

2021-02-07 09:19:23 892

原创 操作系统——进程间通信

进程间通信 **管道** **共享内存** **消息队列** **信号量**1.为什么需要进程间通信?原因是由于进程都拥有自己独立的进程虚拟地址空间,从而导致了进程的独立性;通过进程间通信,可以让不同的进程进行协作。2.目前最大的进程间通信的技术是:网络!管道1.从命令来看ps aux | grep zpf ==》 " | " 就是管道ps 和 grep 是命令,同时要理解也是一个程序ps aux 的输出结果, 通过管道,传输给了 grep 程序。换一句话说,ps aux 的结

2021-02-06 23:29:12 774

原创 操作系统——基础IO

基础IO1.C语言操作文件接口2.系统调用函数的操作文件接口3.文件描述符4.文件描述符&文件流指针的区别5.重定向6.静态库&动态库C语言操作文件接口FILE* fopen(const char* path, const char* mode);path:待打开的文件(文件路径 + 文件名称)mode:以何种方式打开r:以只读方式打开,当文件不存在的时候,就会打开失败r+:以读写方式打开,当文件不存在的时候,就会打开失败w:以只写方式打开,如果文件不存在,则创建

2021-02-06 20:40:09 687

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除