C++ is my favorite language (I was historically a PL/I fan), but it's a
deep pool to get into.  Decent object-oriented programming requires
learning a whole bunch of new ways to do things, and think about things.
There are many layers now of functionality, and there's no serious "Learn
C++ In Seven Days" book any more.  The language has grown and expanded
quite a bit past where my knowledge and experience ends.

But I definitely agree that's it's useful as "enhanced C".  But as you
learn more, you can implement more and better patterns... try not to rush
it too much, and free advice: write, don't read (code).  There may be a
1000 ways to do things wrong in assembler, but there's billions in C++.  So
be careful about the examples you emulate.  The founder of C++ said
something like "You can shoot yourself in the foot with any language, but
with C++, it'll blow your leg clean off."

Eventually, the big problem with OOP is designing an intelligent class
hierarchy to solve a particular problem.  And that is where so many go
wrong.  The real world of applications rarely comes up with something as
obvious as Thing: Animal/Vegetable/Mineral. Animal: Cat/Dog.

And then you can get into templates, and whatever new & crazy stuff they've
thought of recently.  It's a whole new world, lots of fun, but it gets a
long long way away from what you're probably used to in assembly (or C for
that matter).  But again, a subset of C++ is useful and valuable; you don't
have to (and it's probably insane to) use every feature.

sas

On Tue, May 30, 2017 at 12:18 PM, Kirk Wolf <[email protected]> wrote:

> We use a small subset of C++ (better C) on z/OS:
>
> classes (encapsulation)  (but very little use of inheritance)
> RIAA
> exceptions
> better type checking
> improved syntax (like late declaration of variables)
> inlining of functions in class header  (and very little use of function
> macro)
>
>
> Kirk Wolf
> Dovetailed Technologies
> http://dovetail.com
>
> On Tue, May 30, 2017 at 7:22 AM, David Crayford <[email protected]>
> wrote:
>
> > This might bewilder you some more because C++ is a tricky language for a
> > beginner. It''s a simple thin wrapper class around C stdio that provides
> > RAII and some return value checks that throw exception when errors occur.
> > If you can work this out you're well on your way to being competent. It's
> > mainly meant as a demonstrator for constructors/destructors which are
> > fundamental to C++ programming.
> >
> > #include <iostream>
> > #include <string>
> > #include <stdexcept>
> > #include <cstdio>
> >
> > class File
> > {
> > public:
> >     // default constructor
> >     File() : m_file( 0 ) {}
> >
> >     // constructor - opens the file
> >     File( const std::string & filename, const std::string & mode )
> >         : m_file( 0 )
> >     {
> >         std::cout << "constructor\n";
> >         open( filename, mode );
> >     }
> >
> >     // move constructor - takes ownership of the underlying file object
> >     File( File && rhs ) : m_file(0)
> >     {
> >         std::cout << "move constructor\n";
> >         m_file = rhs.m_file;
> >         rhs.m_file = 0;
> >     }
> >
> >     // destructor
> >     ~File()
> >     {
> >         close();
> >     }
> >
> > public:
> >     // opens a file
> >     void open( const std::string & filename, const std::string & mode )
> >     {
> >         std::cout << "opening file " << filename << "\n";
> >         m_file = fopen( filename.c_str(), mode.c_str() );
> >         if (!m_file) throw std::runtime_error( "Error opening file: " +
> > std::string( strerror( errno ) ) );
> >     }
> >
> >     // closes the files
> >     void close()
> >     {
> >         if (m_file)
> >         {
> >             std::cout << "closing file\n";
> >             fclose( m_file );
> >             m_file = 0;
> >         }
> >     }
> >
> >     // reads from the file
> >     int read( void * buffer, size_t size )
> >     {
> >         return fread( buffer, 1, size, m_file );
> >     }
> >
> >     // writes to the file
> >     int write( const void * buffer, size_t size )
> >     {
> >         int bytesWritten = fwrite( buffer, 1, size, m_file );
> >         if (bytesWritten == 0) // I/O error
> >         {
> >             throw std::runtime_error( std::string( "Error writing to
> file:
> > " + std::string( strerror( errno ) ) ) );
> >         }
> >         return bytesWritten;
> >     }
> >
> > private:
> >     FILE * m_file;  // file handle
> > };
> >
> > // factory function to demonstrate change of ownership
> > File openFile( const std::string filename, const std::string & mode )
> > {
> >     File file( filename, mode );
> >     return file;
> > }
> >
> > int main( int argc, char * argv[] )
> > {
> >     try
> >     {
> >         // open the files
> >         File input = openFile( "DD:INPUT", "rb, type=record, noseek" );
> >         File output( "DD:OUTPUT", "wb, type=record" );
> >         // copy the input file to the output file
> >         size_t bytesRead;
> >         char buffer[32768];
> >         while ( ( bytesRead = input.read( buffer, sizeof buffer ) ) )
> >         {
> >             output.write( buffer, bytesRead );
> >         }
> >         // <<<<< destructors run here when the file objects go out of
> scope
> >     }
> >     catch (std::exception & e)
> >     {
> >         std::cout << e.what() << "\n";
> >     }
> >     return 0;
> >
> > }
> >
> >
> >
> > On 30/05/2017 4:32 AM, Steve Beaver wrote:
> >
> >> Does anyone have a complete piece of C++ code that runs under MVS or
> >> Linux that I can study?  99% of the stuff I write is HLASM and to a
> point I
> >> find C++ bewildering.
> >>
> >> TIA
> >>
> >> Steve
> >>
> >> ----------------------------------------------------------------------
> >> For IBM-MAIN subscribe / signoff / archive access instructions,
> >> send email to [email protected] with the message: INFO IBM-MAIN
> >>
> >
> > ----------------------------------------------------------------------
> > For IBM-MAIN subscribe / signoff / archive access instructions,
> > send email to [email protected] with the message: INFO IBM-MAIN
> >
>
> ----------------------------------------------------------------------
> For IBM-MAIN subscribe / signoff / archive access instructions,
> send email to [email protected] with the message: INFO IBM-MAIN
>



-- 
sas

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

Reply via email to