Can constructor call another method?

Discussion in 'C++' started by Christopher, Sep 11, 2008.

  1. Christopher

    Christopher Guest

    Its been awhile and I am rusty.

    Can the constructor of my class call another method in the same class
    if that other method does not change any member data?

    I want to simply have a seperate method that returns a huge string,
    that string containing code in another language, which is to be
    compiled by a third party API when my object is being contructed.

    class MyClass()
    {
    public:

    MyClass()
    {
    m_effect = ThirdPartyAPIFunction( GetHLSL() );
    }

    private:

    const std::string GetHLSL()
    {
    std::string hlsl = "";
    /*1*/ hlsl += " // This is HLSL code";
    /*2*/ hlsl += "float4 IntensityAmbient;";

    return hlsl;
    }

    ThirdPartyAPIVaribale * m_effect;
    };
     
    Christopher, Sep 11, 2008
    #1
    1. Advertising

  2. Christopher

    asm23 Guest

    Christopher wrote:
    > Its been awhile and I am rusty.
    >
    > Can the constructor of my class call another method in the same class
    > if that other method does not change any member data?


    Yes, it can call another method in the same class. And there is no limit
    to change member data or not.
     
    asm23, Sep 11, 2008
    #2
    1. Advertising

  3. Christopher

    Eric Johnson Guest

    On Sep 10, 6:02 pm, Christopher <> wrote:
    > Its been awhile and I am rusty.
    >
    > Can the constructor of my class call another method in the same class
    > if that other method does not change any member data?
    >


    One other thing to watch out for -- you want to stay away from calling
    virtual functions from within a constructor. Search in this list for
    "Call virtual function in constructor" for more info on that topic.

    Happy coding!
    -Eric
     
    Eric Johnson, Sep 11, 2008
    #3
  4. Christopher

    James Kanze Guest

    On Sep 11, 7:15 pm, "Alf P. Steinbach" <> wrote:
    > * Eric Johnson:


    > > On Sep 10, 6:02 pm, Christopher <> wrote:
    > >> Its been awhile and I am rusty.


    > >> Can the constructor of my class call another method in the
    > >> same class if that other method does not change any member
    > >> data?


    > > One other thing to watch out for -- you want to stay away
    > > from calling virtual functions from within a constructor.


    > There's no reason to.


    > In C++ it's safe to call virtual functions from a constructor.


    > Other languages (Java, C#) have problems with that, not C++.


    I don't know about C#, but it's "safe" in Java as well. Just
    safe in a different (IMHO less useful) way. In both cases, you
    have to know what it means. And for obvious reasons, in neither
    case can it behave "intuitively".

    --
    James Kanze (GABI Software) email:
    Conseils en informatique orientée objet/
    Beratung in objektorientierter Datenverarbeitung
    9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
     
    James Kanze, Sep 11, 2008
    #4
  5. Christopher

    James Kanze Guest

    On Sep 12, 12:23 am, "Alf P. Steinbach" <> wrote:
    > * James Kanze:


    [...]
    > >> In C++ it's safe to call virtual functions from a constructor.


    > >> Other languages (Java, C#) have problems with that, not C++.


    > > I don't know about C#, but it's "safe" in Java as well. Just
    > > safe in a different (IMHO less useful) way.


    > I don't know what you mean by that. In fact, unless my memory
    > is playing tricks on me, you have earlier remarked on the
    > unsafety of Java in that respect, maintaining that it's a
    > major cause of errors in Java programs. Anyway, virtual calls
    > from constructors are not type safe in Java.


    It's safe in the sense that the behavior is well defined, and
    you can take precautions and handle it. (All of the member
    variables of the derived class are "zero initialized" before the
    base class constructor runs.) That doesn't mean that it isn't a
    major cause of errors; just because you can handle it correctly
    doesn't mean that programmers think to do so. It's definitely a
    case of poor language design.

    (You'll note that I put safe in quotes. To indicate that I was
    using the word in a very special, and in this case, restricted
    sense.)

    > > In both cases, you have to know what it means.


    > I think that goes for any language feature. :)


    Yes. But some are more intuitive than others: I've yet to
    encounter a language where + meant anything but addition. Where
    as I can't really think of an intuitive meaning in this case:
    there's nothing intuitive about what C++ does, and what Java
    does is even worse. But a language has to define something.

    > > And for obvious reasons, in neither case can it behave
    > > "intuitively".


    > Hm, the C++ rules are very intuitive -- unless one's
    > background is from Java.


    I disagree. I don't think that there is any real "intuitive"
    behavior here. Neither in C++ nor in Java. We're beyond the
    realm of intuition.

    --
    James Kanze (GABI Software) email:
    Conseils en informatique orientée objet/
    Beratung in objektorientierter Datenverarbeitung
    9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
     
    James Kanze, Sep 12, 2008
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. jeffc
    Replies:
    0
    Views:
    686
    jeffc
    Aug 26, 2003
  2. Matt Graham
    Replies:
    3
    Views:
    515
    Matt Graham
    Feb 7, 2004
  3. Andy
    Replies:
    9
    Views:
    511
    Pete Becker
    Sep 24, 2006
  4. Generic Usenet Account
    Replies:
    10
    Views:
    2,248
  5. Warren Tang
    Replies:
    9
    Views:
    672
    James Kanze
    Apr 15, 2008
Loading...

Share This Page