类构造函数初始化列表
非常感激我队友大爹给我的复习资料
定义格式
构造函数初始化列表以冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟着一个放在括号中的初始化式。
123456789class Example{ public: int a; float b; // 构造函数初始化列表 Example() : a(0), b(8.7) {} // 构造函数内部赋值 // Example() {a = 0; b = 8.7;}};
初始化顺序
C++初始化类成员时, 是按照声明的顺序初始化的, 而不是按照出现在初始化列表中的顺序。
以下面的顺序为例:
1234567class Test {public: int _a, _b; Test(int a, int b) : _b(b), _a(_b) {}};cout << tt._a << " " < ...
多维数组传参与赋值
非常感激我队友大爹给我的复习资料
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051#include<bits/stdc++.h>using namespace std;void print_1(const int (*a)[3], const int& n) { for (int i = 0; i < n; i++) { for (int j = 0; j < 3; j++) { cout << a[i][j] << " "; } cout << endl; } cout << endl;}void print_2(const int a[][3], const int& n) { fo ...
attacklab-rtarget(未完成)
写在前面
官方文档https://csapp.cs.cmu.edu/3e/attacklab.pdf
和ctarget不同,rtarget程序引入了常见的栈保护机制,如栈随机化,使得程序运行的地址是不确定的。这样便无法通过注入代码(写指令)的方式攻击程序。
但是办法总比困难多。有些人想出了一个叫“断章取义”的办法来攻击程序。即在指令集中截取某一部分指令(掐头不去尾),这部分指令的意思可能会发生变化,然后我们就利用这部分现有的指令去攻击程序。
以官方文档给出的例子为例:
12400f15: c7 07 d4 48 89 c7 movl $0xc78948d4,(%rdi)400f1b: c3 retq
如果只截取48 89 c7这段指令的话,那么我们就生成了一个全新的指令:movq %rax, %rdi
实验作者已经把这些可能有帮助的指令全都放到了rtarget的start_farm和mid_farm中间。
1234567891011121314151617181920212223242526272829303132333435363738390000000000401994 < ...
作业2
P166 5.3
通常,类型与子类型之间的继承关系,反映出“is-a”的关系。例如,具有范围检验能力的ArrayRC是一种Array,Book是一种LibraryRentalMaterial,AudioBook是一种Book…以下各组说法,哪一些反应了“is-a”的关系?
member function是一种函数?✅
member function是一种class? ❌
construction是一种成员函数?✅
飞机是一种交通工具?✅
引擎是一种卡卡车?❌
圆形是一种几何形状?✅
正方形是一种矩形?✅
汽车是一种飞机?❌
借阅者是一种图书馆?❌
P166 5.4
图书馆提供以下出借馆藏分类,每一种都有自己的借出与归还方式。请将它们组织成一个继承层次体系:
library_lending_material
book
audio book
rental book
CD-ROM book
children’s puppet
record
video
video game
Sega
Sony Playstation
Nintenio
P189 6.1
试改写以 ...
作业1
P33 1.5
编写一个程序,能够询问用户的姓名,并读取用户所输入的内容。请确保用户输入的名称长度大于两个字符。如果用户的确输入了有效名称,就响应一些信息。请以两种方式实现:第一种使用C-style字符串,第二种使用string对象。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748#include "bits/stdc++.h"using namespace std;set<string> v1;set<char *> v2;int query1() { char s[105]; scanf("%s", s); if (strlen(s) <= 2) { return -1; } if (v2.count(s)) { return 1; } else { ...
web前端大作业报告
准备工作
环境配置
安装git,用于维护工程代码,方便回滚
安装nodejs,这是vue必备的开发环境
安装@vue/cli脚手架,输入以下命令npm i -g @vue/cli
启动vue自带的图形化项目管理界面,输入以下命令vue ui
关于vue脚手架
页面上方有一个 vue 项目管理器,在那里进行创建,创建可以指定路径,如:打算在 E 盘 vue 文件夹创建,输入:E:\vue\。
预设选择vue3
对于插件,router 插件与 vuex 插件 (实现多个组件之间维护同一组数据,类似于 redux),两个都有安装按钮
对于依赖,安装bootstrap,用于方便的使用css代码。(也可以了解下element-plus这段插件)
vue框架的结构
views: 写各种页面
router: 初始状态下有两个路由,/,about
components: 存储组件
main.js 入口,整个组件挂载到 app 元素上
注:后端渲染与前端渲染
后端渲染:每打开一个页面,服务器发送请求并且返回回来
前端渲染;只有在第一次打开(无论是什么 ...
vercel加速
写在前面
githubpages的访问速度非常慢,这里提供一种免费的加速方法,那就是vercel。vercel是类似于githubpages的一个托管平台,但它要更好更快。本站评论区的加速也是用vercel来做的。
强烈建议拥有自己的域名后再操作
域名加速
进入vercel官网,使用你的github账号注册。注册完后把你的博客仓库导入进来。
导入的过程一路默认即可。
最后点击deploy即可完成部署。
绑定域名
加速是完成了,但是vercel提供的域名比github还长还难用,所以再进行一步操作:把自己的域名绑定上去。
点击Domains,去设置域名绑定。
导入两个域名:www.自定义域名和自定义域名。
然后就会发现报错了。不要慌张。
修改DNS
Vercel会提示你加两条解析,并且把方法都告诉你了。
进入自己的域名控制台。记得原先添加了两条解析吗,这次咱们新增一条解析,修改一条解析。
IP地址那条解析,原先的IP地址改成Vercel给你提供的IP地址。
新增一条记录类型为CNAME,主机记录为www,记录值为cname.vercel-dns.com的记录。
如果设置正确 ...
githubpages更换域名
写在开头
使用githubpages部署博客的网址是xxxx.github.io,太捞了,想换个域名很正常。本文章就基于这个介绍,githubpages换成自定义域名的教程。
购买域名
由于服务器是放在github上的,也就是国外服务器,所以买域名是不用备案的。
(如果要使用国内厂商的cdn加速的话还是要备案的)。
总之,买一个自己的专属域名,本章不重点介绍。后缀选啥应该都没什么区别,博主用的top,逼格高又便宜。
域名解析
买完域名后,进入域名控制台,在操作一栏中点击解析。我们要在这里添加两条记录。
记录1
打开自己的cmd终端,输入命令ping yourname.github.io获取ip地址,大概长这样:xxxx.xxxx.xxxx.xxx
返回域名控制台,点击添加记录,选择
记录类型:A
主机记录:@
记录值:刚才得到的IP地址
记录2
返回域名控制台,点击添加记录,选择
记录类型:CNAME
主机记录:www
记录值:yourname.github.io
添加以上两条记录完毕后,如果状态都显示正常,说明就成功了。
Github设置
进入github管理静态 ...
C++实验2
实验内容
利用C++语言,参考教材,实现Shape程序开发与测试,包括各种图形对象的定义,在主函数中实现图形对象的添加、删除操作。具体技术内容包括
派生层次设计
虚函数定义及纯虚函数的定义
虚析构函数的定义
结合虚函数理解多态的概念
给出实验结果截图及实验分析
实验原理
派生
系统提供了相当多的已定义好的基类,用户可以根据具体的应用,在已有类的基础上构架新类,在派生类中,可以直接使用父类部分的代码,但却不需要重新编写父类的代码。这样可以加速软件开发的速度,保障软件开发的质量。继承提供了在已有类的基础上开发出新类的机制,可以节省重复代码的编写工作,是软件重用的基础。
派生结构图
虚函数
虚函数,就是在基类声明函数是虚拟的,在派生类中才正式定义的函数。虚函数的作用就是在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。
虚函数 是在基类中使用关键字 virtual 声明的函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。
我们想要的是在程序中任意点可以根据所调用的对象类型来选择调用的函数,这种操作被称为 ...
C++实验1
实验内容
利用C++语言,参考教材,实现Triangular类开发与测试,包括:
构造函数、析构函数
数据成员定义、函数成员定义
利用运算符重载技术,实现Iterator
给出实验结果截图及实验分析
实验原理
2.1 类的基本结构包含哪些部分
关键字,类名,访问修饰符,变量,方法。
类定义是以关键字 class 开头,后跟类的名称。类的主体是包含在一对花括号中。类定义后必须跟着一个分号或一个声明列表。
关键字 public 确定了类成员的访问属性。在类对象作用域内,公共成员在类的外部是可访问的。您也可以指定类的成员为 private 或 protected。
2.2 构造函数、析构函数的特点、用法分析
类的构造函数是一种特殊的函数,在创建一个新的对象时调用。类的析构函数也是一种特殊的函数,在删除所创建的对象时调用。
构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。
析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。析构函数有助于在跳出程序 ...