I was going through walkthoroughs as a practice for my final and i came across this question. Although i was able to do it correctly, I was not able to get the presence of a colon in one of the lines(line 35):

#include <iostream>
using namespace std;
class base{
    int *x;
    int sz;
public:
    base(int cnt) { x = new int [sz = cnt];
                    seed(2); }
    ~base(){ if(x) delete [] x; }
    void seed(int val){ for(int i = 0; i < sz; i++)
                            x[i] = val + i; }
    void seed(const int v[]){ for(int i = 0; i < sz; i++)
                            x[i] = v[i]; }
    int term(int n) const{
        int *p = new int [sz];
        int i, tmp;
        for(i = 0; i < sz; i++)
            p[i] = x[i];
        tmp = p[0];
        for(int k = 0; k < n;  k++){
            for(i = 1; i < sz; i++){
                tmp += p[i];
                p[i - 1] = p[i];
                }
            p[i - 1] = tmp;
            tmp = p[0];
            }
        delete [] p;
        return tmp;
        }
    };

ostream &operator<<(ostream &os, const base &x){
    for (int i = 0; i < 7; i++)
        os << (i > 0 ? ", " : " " ) << x.term(i); //<- colon in question
    return os;
    }

class deranged: public base{
public:
    deranged(int n, int m) : base(2) {
        int sval[2];
        sval[0] = n; sval[1] = m;
        seed(sval);
        }
    };

int main(){
    base x(3);
    deranged fib(4, 5);
    cout << x << '\n' << fib << '\n';
    return 0;
    }

Could somebody please enlighten me in what that line means. I complete my walkthrough by ignoring the " " following the colon and it was correct too.

In your case, if "i" is larger than zero, you send a ", " to the stream, otherwise you send a blank. So, ":" works like "else".

Comments
Very helpful And clear

Indeed, this statement is like a an if statment its equivelent would look something like this.

string myIF(int a){
    if(a > 0){
        return ", ";
    }else{
        return " ";
    }
}

Hope that makes sense
Chris

Comments
Superbly Explained!!

In your case, if "i" is larger than zero, you send a ", " to the stream, otherwise you send a blank. So, ":" works like "else".

Indeed, this statement is like a an if statment its equivelent would look something like this.

string myIF(int a){
    if(a > 0){
        return ", ";
    }else{
        return " ";
    }
}

Hope that makes sense
Chris

That is as clear as it could be!! Thanks guys!!

Mark as solved?

sorry forgot to mark it! thanks for reminding!

This question has already been answered. Start a new discussion instead.