【47】2求1+2+3+...+n

来源:互联网 发布:实用魔术教学软件 编辑:程序博客网 时间:2024/05/16 07:40

【47】2求1+2+3+…+n

  • 时间限制:1秒
  • 空间限制:32768K

题目描述
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、
case等关键字及条件判断语句(A?B:C)。

VS2010代码:

/***************************************************///方法二:虚函数和继承#include<iostream>using namespace std; class A;A* Array[2]; //定义基类指针class A{public:    virtual unsigned int sum(unsigned int n)    {   return 0;   }};class B: public A {public:    virtual unsigned int sum(unsigned int n)    {   return Array[!!n]->sum(n-1) + n;}     //整形的连续两次取!变成对应的bool类型。};class Solution {public:    int Sum_Solution(int n) {        A a;        B b;        Array[0]=&a; //循环结束        Array[1]=&b; //循环开始        int value= Array[1]->sum(n); //用虚函数形成多态,从而可以只调用sum即可。        return value;    }};int main(){    Solution s1;    cout<<s1.Sum_Solution(5)<<endl;}

基类指针可以指向派生类地址,但(由于类的内存机制,继承时内存中先是基类成员,然后才是派生类成员)仅限于指向基类中存在的成员
派生类指针指向基类时,会发生数组越界访问的情况。
将派生类的地址交给基类使用,是实现多态的基础。(因为虚函数表和虚函数)。

0 0
原创粉丝点击