【程设の旅】第一次上机卡题复盘

别急,先来张美图
image
不开玩笑了 总结一下,就是感觉目前的思维方式还没有完全形成
有点靠惯性做题,虽然出来了九道,但是还是有点打野拳的感觉
第一卡的是4

04:编程填空:两种计数

描述

填写代码,使输出结果为

0
2
1
11
7
11
4
3

#include <iostream>
using namespace std;class Counter {private:static int nGlobalNumber;int nLocalNumber;
public:
// 在此处补充你的代码
void add(int n) { nLocalNumber += n; }void PrintLocalNumber(){cout << nLocalNumber << endl;}static void PrintGlobalNumber() {cout << nGlobalNumber << endl;}};
int Counter::nGlobalNumber = 0;int main()
{Counter::PrintGlobalNumber();Counter b1, b2;Counter::PrintGlobalNumber();b1.PrintLocalNumber();b2.add(10);b2.PrintLocalNumber();Counter* b3 = new Counter(7);b3->PrintLocalNumber();Counter b4 = b2;b4.PrintLocalNumber();Counter::PrintGlobalNumber();if (b3 != NULL){delete b3;b3 = NULL;}Counter::PrintGlobalNumber();return 0;
}

输入

-

输出

0
2
1
11
7
11
4
3

样例输入

-

样例输出

0
2
1
11
7
11
4
3

Solution

我们可以看到其中的nGlobalNumber是静态成员变量,也就是指它是相当于全局变量的存在
那么,可以认出,调用默认构造函数的时候,它会加一,同时,调用两个复制构造函数的时候也会加一(4就是这么来的),然后由于有delete的存在 调用析构函数的时候会减一,这个时候我们应该注意的是哪个LocalNumber,也就是b2的nLocalNumber是1,最坑的就是要作判断,这个想了老久,但是有时候就是要出奇招嘛

#include <iostream>
using namespace std;class Counter {private:static int nGlobalNumber;int nLocalNumber;
public:Counter(){nGlobalNumber++;if(nGlobalNumber==2) nLocalNumber=1;else nLocalNumber=nGlobalNumber;}Counter(int x){nLocalNumber=x;nGlobalNumber++;}Counter(const Counter &x){nGlobalNumber++;nLocalNumber=x.nLocalNumber;}~Counter(){nGlobalNumber--;}
void add(int n) { nLocalNumber += n; }void PrintLocalNumber(){cout << nLocalNumber << endl;}static void PrintGlobalNumber() {cout << nGlobalNumber << endl;}};
int Counter::nGlobalNumber = 0;int main()
{Counter::PrintGlobalNumber();Counter b1, b2;Counter::PrintGlobalNumber();b1.PrintLocalNumber();b2.add(10);b2.PrintLocalNumber();Counter* b3 = new Counter(7);b3->PrintLocalNumber();Counter b4 = b2;b4.PrintLocalNumber();Counter::PrintGlobalNumber();if (b3 != NULL){delete b3;b3 = NULL;}Counter::PrintGlobalNumber();return 0;
}

09:编程填空:简单的对象

描述

程序填空,使得程序输出:
2
1
1
0

#include <iostream>
using namespace std;
class A
{static int num;
public:A(){num+=1;}void func(){cout<< num <<endl;}
// 在此处补充你的代码
};int A::num=1;int main()
{A a1;const A a2 = a1;A & a3 = a1;const A & a4 = a1;a1.func();a2.func();a3.func();a4.func();return 0;
}

输入

输出

2
1
1
0

样例输入

None

样例输出

2
1
1
0

Solution

这题就是我说的,我感觉自己现在还在打野拳的阶段,为什么,因为这题感觉想到了解法就十分简单
我们看到,这题肯定是要调用func const函数的 那么,我们得注意到这之间的区别,不能让这个函数只是输出的工具,这个思维要有
然后?就在新函数里减一,完了!
我c我真tm是个sb

#include <iostream>
using namespace std;
class A
{static int num;
public:A(){num+=1;}void func(){cout<< num <<endl;}void func()const{num--;cout<<num<<endl;}
};int A::num=1;int main()
{A a1;const A a2 = a1;A & a3 = a1;const A & a4 = a1;a1.func();a2.func();a3.func();a4.func();return 0;
}

10:编程填空:a+b+c问题

描述

完善代码,使其能够按照指定方式输出

#include <iostream>
using namespace std;
// 在此处补充你的代码
int main() {int t;cin >> t;while (t --){int aa, bb, cc;cin >> aa >> bb >> cc;A a(aa);B b(bb);C c(cc);A* x = &a;A* y = &b;A* z = &c;cout << (x->get_value() + y->get_value() + z->get_value()) << " ";cout << ((*x) + y + z)->get_value() << endl;}return 0;
}

输入

第一行是数据组数t
每组数据1行,为三个整数 a 和 b 和 c

输出

对每组数据,输出 a+b+c,连续输出两次中间空格隔开。(数据保证结果在int范围内)

每组数据输出占一行

样例输入

3
1 2 3
1 2 4
6 6 6

样例输出

6 6
7 7
18 18

Solution

这道题是真的掌握不熟...我们可以看到 用三个元素去重置a,b,c
首先,明确B(int a):A(a)的含义?
这个指的是因为B中的num是从A中继承过来的 所以调用的构造函数要是A中的 而不是多赋值
然后(x)表示解指针 返回的是A类对象
所以,我们要重载一个A+A
的加号
然后!就是->的重载
我们为什么要重载A-> 因为加法返回的是一个A变量 我们需要把A转化为A*来调用get_value()
this 指的是返回当前对象的地址
this 返回的是当前对象(A&)或者当前对象的拷贝A
所以 要将A转化为A
只要把->重载为this即可
哇!妙!

#include <iostream>
using namespace std;
class A{
public:int num;A():num(0){}A(int a){num=a;}int get_value(){return num;} A* operator->(){return this;}
};
class B:public A{
public:B(int a):A(a){}	
};
class C:public A{
public:C(int a):A(a){}
};
A operator+(const A a,const A* b){A temp(a.num+b->num);return temp;
}
// 在此处补充你的代码
int main() {int t;cin >> t;while (t --){int aa, bb, cc;cin >> aa >> bb >> cc;A a(aa);B b(bb);C c(cc);A* x = &a;A* y = &b;A* z = &c;cout << (x->get_value() + y->get_value() + z->get_value()) << " ";cout << ((*x) + y + z)->get_value() << endl;}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3创建

1.创建2.导入idea修改调试 (修剪)(修改)HomeView.vue点击查看代码 <template><div>Hollow World</div> </template><!--setup 代表可以使用Vue3的语法特性--> <script setup></script>(精简路由)index.js点击查看代码import { c…

使用vim编辑器和nmcli的方法配置静态网络

目录使用vim编辑器修改网络配置使用nmcli命令配置网络 使用vim编辑器修改网络配置关于vim编辑器的使用方法注意:以下配置都是在NAT网络模式下进行操作的第一步 确定好虚拟机IP网段并确定网关:vim /etc/sysconfig/network-scripts/ifcfg-ens160 #注意上面的ens160可能与你的电…

C++实验

实验1#include<stdio.h> int main() {int x,y,i;i=0;printf("打印次数:");scanf("%i",&x);printf("打印方向(0为竖,1为横向):");scanf("%i",&y);if(y==0) {while(i<x){printf(" o \n");printf("…

印度股票行情数据API接口教程 StockTV

印度股票实时行情数据接口 印度股票实时行情API数据接口原创 印度交易所股票行情数据API接口 获取数据源测试Key: StockTV API 📚 功能列表模块 功能描述 示例方法股票 市场列表、指数、K线、IPO日历等 get_indices(), get_kline()外汇 实时汇率、交叉汇率、K线图表 get_real…

Oracle VM VirtualBox Ubuntu 桥接模式下 固定虚拟机的 ip

Ubuntu版本: Ubuntu server:22.04.5 LTS 注意:网上找了很多版本,都是相似的去编辑 /etc/netplan/ 下的 xx-cloud-init.yaml 文件,但是配置文件中,有一段提示需要注意此文件是自动生成的,每次开机都会重新生成,所以直接编辑,将不起作用,需要按提示 添加 /etc/cloud/cl…

AtCoder Beginner Contest 396-G - Flip Row or Col

https://atcoder.jp/contests/abc396/tasks/abc396_g 下面给出题目的中文思路、详细解释以及带中文注释的 C++ 实现代码。代码实现 下面给出带中文注释的 C++ 代码: #include <bits/stdc++.h> using namespace std;typedef long long ll;// 快速Walsh-Hadamard变换(FWH…

DVWA-CSRF-Low

1.更改密码并使用BP抓包2.将抓到的数据包发送到重放模块,删除referer 内容,密码成功更改;referer不影响数据包请求结果,判断存在漏洞3.构造下面的index.html文件,其中的链接为更改密码链接 <!DOCTYPE html> <html lang="en"> <head><meta …

UE5之重定向Mixamo动画

首先将下载的fbx格式的角色导入UE5中,得到角色的骨骼,网格体,物理资产等,然后将fbx格式的动画也导入到UE中,选择刚刚导入的骨骼。 然后右键 动画---IK绑定---IK绑定,新建两个IK绑定Epic和Archer,分别选择刚刚导入的骨骼以及需要重定向的目标骨骼。在两处骨骼的头,左右手…

p44太阳花

from turtle import * color(red, yellow) begin_fill() while Ture:forward(200)left(170)if abs(pos()) < 1:break end_fill() done()

基于IEKF迭代扩展卡尔曼滤波算法的数据跟踪matlab仿真,对比EKF和UKF

1.程序功能描述 基于IEKF迭代扩展卡尔曼滤波算法的数据跟踪matlab仿真,对比EKF和UKF.仿真输出误差收敛曲线和误差协方差收敛曲线。 2.测试软件版本以及运行结果展示MATLAB2022A版本运行 (完整程序运行后无水印) 3.核心程序for i=1:Lekf-1z =…

Winform控件命名规则

C#控件命名规范控件分类控件名称命名规范说明数据显示控件DataGridViewdgv 数据绑定和定位控件BindingSourcebds BindingNavigatorbdn 文本编辑控件TextBoxtxt RichTextBoxrtxt MaskedTextBoxmtxt 信息显示控件Labellbl LinkLabelllbl StatusTripst ProgressBarpb 网页显示控件…