Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. A complex c++ question.

A complex c++ question.

Scheduled Pinned Locked Moved C / C++ / MFC
c++helpquestion
14 Posts 7 Posters 1 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    Anonymous
    wrote on last edited by
    #1

    hi friends, i have a c++ program like this : #include "iostream.h" int main() { cout << "John" << endl; return 1; } The program will print "John" on screen. Now my problem is that i want to print "Hello John Bye" on the screen without changing anything inside main function. CAN SOMEBODY PROVIDE ME THE ANSWER.

    I 1 Reply Last reply
    0
    • A Anonymous

      hi friends, i have a c++ program like this : #include "iostream.h" int main() { cout << "John" << endl; return 1; } The program will print "John" on screen. Now my problem is that i want to print "Hello John Bye" on the screen without changing anything inside main function. CAN SOMEBODY PROVIDE ME THE ANSWER.

      I Offline
      I Offline
      Imran Farooqui
      wrote on last edited by
      #2

      #include "stdafx.h"

      using std::cout;
      using std::endl;

      class CTest
      {
      public:

      CTest()
      {
      cout << "Hello John bye" << endl;

       exit(0);
      

      }

      };

      int main(int argc, char* argv[])
      {
      cout << "John" << endl;

      return 0;
      }

      CTest test;

      A C 2 Replies Last reply
      0
      • I Imran Farooqui

        #include "stdafx.h"

        using std::cout;
        using std::endl;

        class CTest
        {
        public:

        CTest()
        {
        cout << "Hello John bye" << endl;

         exit(0);
        

        }

        };

        int main(int argc, char* argv[])
        {
        cout << "John" << endl;

        return 0;
        }

        CTest test;

        A Offline
        A Offline
        Anonymous
        wrote on last edited by
        #3

        Hi Imran, It will print ,"Hi John bye John" but i need "Hi john bye".

        A I 2 Replies Last reply
        0
        • A Anonymous

          Hi Imran, It will print ,"Hi John bye John" but i need "Hi john bye".

          A Offline
          A Offline
          Antti Keskinen
          wrote on last edited by
          #4

          Based on Imran's solution, here is a bit more customized version which does as desired.

          #include <iostream>
          using namespace std;

          class CFirst
          {
          public:
          CFirst() { cout << "Hi "; }
          }

          class CLast
          {
          public:
          CLast() { cout << " Bye"; }
          }

          CFirst object1;

          int main( int argc, char* argv[] )
          {
          cout << "John" << endl;
          return 0;
          }

          CLast object2;

          This piece would print "Hi John\n Bye". Removing the line change from inside main is impossible, as far as I know, without doing some serious stream interception. All this seems unnecessary though. Just boot the line change from there, or pretend that you didn't notice it :P -Antti Keskinen ---------------------------------------------- The definition of impossible is strictly dependant on what we think is possible.

          C 1 Reply Last reply
          0
          • I Imran Farooqui

            #include "stdafx.h"

            using std::cout;
            using std::endl;

            class CTest
            {
            public:

            CTest()
            {
            cout << "Hello John bye" << endl;

             exit(0);
            

            }

            };

            int main(int argc, char* argv[])
            {
            cout << "John" << endl;

            return 0;
            }

            CTest test;

            C Offline
            C Offline
            cmk
            wrote on last edited by
            #5

            What about as Imran had but :

            CTest()
            {
            cout << "Hello ";
            }

            ~CTest()
            {
            cout << " Bye";
            }

            ... although you should really do your own homework. ;) [edit] Hmmm, this doesn't print the " Bye", altough the code goes there. Even adding cout.flush() doesn't print it. Looks like ostream system has been shut down by then. Using printf() does work in printing " Bye", but you need to eat the \n first, and adding \b doesn't seem to work ... hmmm [/edit] ...cmk Save the whales - collect the whole set

            C L 2 Replies Last reply
            0
            • A Anonymous

              Hi Imran, It will print ,"Hi John bye John" but i need "Hi john bye".

              I Offline
              I Offline
              Imran Farooqui
              wrote on last edited by
              #6

              Please refer the code i wrote above: In the constructor of CTest class, there is an exit(0) call. So this program will never enter the main function. Trick is that, in C++, global objects are created before program enters the main function. So we created the object of CTest class as a global object. As such its constructor gets called in which we first print our desired string and then exit(0) gets calls and the program ends.

              1 Reply Last reply
              0
              • A Antti Keskinen

                Based on Imran's solution, here is a bit more customized version which does as desired.

                #include <iostream>
                using namespace std;

                class CFirst
                {
                public:
                CFirst() { cout << "Hi "; }
                }

                class CLast
                {
                public:
                CLast() { cout << " Bye"; }
                }

                CFirst object1;

                int main( int argc, char* argv[] )
                {
                cout << "John" << endl;
                return 0;
                }

                CLast object2;

                This piece would print "Hi John\n Bye". Removing the line change from inside main is impossible, as far as I know, without doing some serious stream interception. All this seems unnecessary though. Just boot the line change from there, or pretend that you didn't notice it :P -Antti Keskinen ---------------------------------------------- The definition of impossible is strictly dependant on what we think is possible.

                C Offline
                C Offline
                cmk
                wrote on last edited by
                #7

                Actually this will/may put : "Hi ByeJohn" because both objects are initialized (constructors called) before main(). I say may, because as far as i know you can't count on the order that global objects will be initialized within a given init_seg. Having said that you could use the #pragma init_seg() directives to put CFirst, CLast and main in different .cpp files and use init_seg(lib) for CFirst and init_seg(user) for CLast to ensure the order they were constructed ... but that seems like a whole lot of work to still get the wrong output. :) ...cmk Save the whales - collect the whole set

                1 Reply Last reply
                0
                • C cmk

                  What about as Imran had but :

                  CTest()
                  {
                  cout << "Hello ";
                  }

                  ~CTest()
                  {
                  cout << " Bye";
                  }

                  ... although you should really do your own homework. ;) [edit] Hmmm, this doesn't print the " Bye", altough the code goes there. Even adding cout.flush() doesn't print it. Looks like ostream system has been shut down by then. Using printf() does work in printing " Bye", but you need to eat the \n first, and adding \b doesn't seem to work ... hmmm [/edit] ...cmk Save the whales - collect the whole set

                  C Offline
                  C Offline
                  cmk
                  wrote on last edited by
                  #8

                  Couldn't remember the console cursor movement functions (ala curses). However, here is a hack that works (and is within the contraints given :)), but not likely the solution you need :

                  #include
                  using namespace std;

                  class CFirst{
                  public:
                  CFirst() {
                  cout << "Hi ";
                  }
                  ~CFirst() {
                  printf("Bye\n");
                  }
                  };
                  CFirst f;

                  #define endl ' '

                  int main( int argc, char* argv[] )
                  {
                  cout << "John" << endl;
                  return 0;
                  }

                  ...cmk Save the whales - collect the whole set

                  1 Reply Last reply
                  0
                  • C cmk

                    What about as Imran had but :

                    CTest()
                    {
                    cout << "Hello ";
                    }

                    ~CTest()
                    {
                    cout << " Bye";
                    }

                    ... although you should really do your own homework. ;) [edit] Hmmm, this doesn't print the " Bye", altough the code goes there. Even adding cout.flush() doesn't print it. Looks like ostream system has been shut down by then. Using printf() does work in printing " Bye", but you need to eat the \n first, and adding \b doesn't seem to work ... hmmm [/edit] ...cmk Save the whales - collect the whole set

                    L Offline
                    L Offline
                    Lost User
                    wrote on last edited by
                    #9

                    Hello all, please don't laugh :laugh: but here is one solution #include #define cout cout << "Hello " #define endl " Bye" << endl int main(int argc, char* argv[]) { cout << "John" << endl; return 1; } :rolleyes: When all else fails read the manual

                    C J A 3 Replies Last reply
                    0
                    • L Lost User

                      Hello all, please don't laugh :laugh: but here is one solution #include #define cout cout << "Hello " #define endl " Bye" << endl int main(int argc, char* argv[]) { cout << "John" << endl; return 1; } :rolleyes: When all else fails read the manual

                      C Offline
                      C Offline
                      cmk
                      wrote on last edited by
                      #10

                      Not laughing, as valid a solution as any, given the constraints. :) ...cmk Save the whales - collect the whole set

                      1 Reply Last reply
                      0
                      • L Lost User

                        Hello all, please don't laugh :laugh: but here is one solution #include #define cout cout << "Hello " #define endl " Bye" << endl int main(int argc, char* argv[]) { cout << "John" << endl; return 1; } :rolleyes: When all else fails read the manual

                        J Offline
                        J Offline
                        Joaquin M Lopez Munoz
                        wrote on last edited by
                        #11

                        That's the kind of solution that pisses teachers off. I love it. Joaquín M López Muñoz Telefónica, Investigación y Desarrollo

                        1 Reply Last reply
                        0
                        • L Lost User

                          Hello all, please don't laugh :laugh: but here is one solution #include #define cout cout << "Hello " #define endl " Bye" << endl int main(int argc, char* argv[]) { cout << "John" << endl; return 1; } :rolleyes: When all else fails read the manual

                          A Offline
                          A Offline
                          Anonymous
                          wrote on last edited by
                          #12

                          hi, this solution should result in compilation error, although i haven't checked it but we can't apply #define on the cout and endl like this.

                          A 1 Reply Last reply
                          0
                          • A Anonymous

                            hi, this solution should result in compilation error, although i haven't checked it but we can't apply #define on the cout and endl like this.

                            A Offline
                            A Offline
                            Antti Keskinen
                            wrote on last edited by
                            #13

                            It isn't doable, because you #define cout as a part of itself.. Like, what you're doing is:

                            #define MAX_AMOUNT MAX_AMOUNT + 20

                            Similar type of error. Man I really wish that that thing would've worked, it would've been a kickass "spoil-a-teacher's-day" for some C++-course :) -Antti Keskinen ---------------------------------------------- The definition of impossible is strictly dependant on what we think is possible.

                            M 1 Reply Last reply
                            0
                            • A Antti Keskinen

                              It isn't doable, because you #define cout as a part of itself.. Like, what you're doing is:

                              #define MAX_AMOUNT MAX_AMOUNT + 20

                              Similar type of error. Man I really wish that that thing would've worked, it would've been a kickass "spoil-a-teacher's-day" for some C++-course :) -Antti Keskinen ---------------------------------------------- The definition of impossible is strictly dependant on what we think is possible.

                              M Offline
                              M Offline
                              Monty2
                              wrote on last edited by
                              #14

                              IT REALLY WORKS like a charm , go ahead try to compile , it works !!! ;P When All Else Fails Read the Manual

                              1 Reply Last reply
                              0
                              Reply
                              • Reply as topic
                              Log in to reply
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes


                              • Login

                              • Don't have an account? Register

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • Categories
                              • Recent
                              • Tags
                              • Popular
                              • World
                              • Users
                              • Groups