Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to say the object only once when I have to use it again and again?

Tags:

c++

Take for example:

int main(void){
    numberComparator comparator1;

    comparator1.setA(78.321);
    comparator1.showA();
    comparator1.setB('c');
    comparator1.setB("Yes");
    comparator1.setB(124.213);
    comparator1.showB();
    comparator1.setB(12);

    return 0;
}

Instead of saying comparator1 over and over again, can I do something shorter?

I understand that this doesn't really change much about how the program works, but it does make it easier to work around with testing a class I make.

I am doing overloading so that for an assortment of inputs into my comparator, my program can handle them without making the results go crazy. In this case, I want the input to be an int, but what if the input isn't?

The answer could be lying around the internet, but as my title may infer, I do not know how to state the question.

like image 705
A. Ortiga Avatar asked Dec 24 '22 06:12

A. Ortiga


2 Answers

You are looking for something like with keyword which is part of, for example, Pascal language.

Unfortunately, C++ doesn't provide similar feature. Using the references, one can shorten the name of the class and somewhat alleviate the pain, i.e.

Comparator comparator1;
...
{
    Comparator& cr = comparator1;

    cr.a();
    cr.b();
    cr.c();
}
like image 73
SergeyA Avatar answered Dec 28 '22 06:12

SergeyA


It depends. If numberComparator has a "fluent" interface, then each member function will return a reference to *this, and you can write:

    comparator1
        .setA(78.321)
        .showA()
        .setB('c')
        .setB("Yes")
        .setB(124.213)
        .showB()
        .setB(12);

Note that this is a bitch to debug by step-into (you have to step into every function until you get to the one you are interested in).

The alternative of course is "use a shorter name".

int main(void){
    numberComparator c1;

    c1.setA(78.321);
    c1.showA();
    c1.setB('c');
    c1.setB("Yes");
    c1.setB(124.213);
    c1.showB();
    c1.setB(12);

    return 0;
}

There is really no point in having a particularly long name if it is limited in scope to a few lines. For a local variable, if it isn't limited in scope to a few lines, your function is probably too long.

like image 45
Martin Bonner supports Monica Avatar answered Dec 28 '22 08:12

Martin Bonner supports Monica