(C++练习)选择题+编程题

个人主页:Lei宝啊 

愿所有美好如期而遇


选择题 

以下程序输出结果是什么()

   class A
   {
   public:
       virtual void func(int val = 1)
       { 
           std::cout<<"A->"<< val <<std::endl;
       }

       virtual void test()
       { 
           func();
       }
   };
   
   class B : public A
   {
   public:
       void func(int val=0)
       { 
           std::cout<<"B->"<< val <<std::endl; 
       }
   };
   
   int main(int argc ,char* argv[])
   {
       B*p = new B;
       p->test();

       return 0;
   }

A: A->0 B: B->1 C: A->1 D: B->0 E: 编译出错 F: 以上都不正确

解析:

首先我们要明白类B继承类A,只是继承了使用权,并不是拷贝一份,所以从类A继承下来的还是属于类A。

new一个B的对象返回其地址给p,p调用test函数,首先在类B中寻找test函数,找不到,去父类中找test函数,test函数隐藏的参数是A*this指针,我们使用B*p去调用,传过去的相当于A* this = p;然后this->func(),这里是多态调用,所以func调用的是类B的func函数(这个函数是虚函数,同时也进行了重写,是构成多态的),同时虚函数的继承是一种接口继承,继承的是接口,也就是说,这里调用类B的func函数,接口是类A的,实现是类B的,所以我们的最终答案是B。

编程题

连续最大和icon-default.png?t=N7T8https://www.nowcoder.com/practice/5a304c109a544aef9b583dce23f5f5db?tpId=182&tqId=34613&ru=/exam/oj

思路:

值连续相加,如果前面所有连续的值相加小于后面即将要加的值,那么舍弃前面的所有值,从后面即将考加的值开始,再继续遍历。

比如:

-1 + 2  <  2,则我们从2开始再向后加,前面的值舍弃。

#include <iostream>
#include <vector>
using namespace std;

int main() 
{

    int n;
    cin >> n;

    vector<int> v(n);
    for(auto &e : v) cin >> e;

    int sum = v[0];
    int max_num = v[0];
    
    for(int i=1; i<n; i++)
    {
        sum = max(sum + v[i], v[i]);
        if(sum > max_num)
            max_num = sum;
    }

    cout << max_num;

    return 0;
}
// 64 位输出请用 printf("%lld")

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lei宝啊

觉得博主写的有用就鼓励一下吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值