Sample Source Code for C++ for Java Programmers

LAST UPDATE: November 4, 2003
BUG REPORTS ARE APPRECIATED!!

The materials here are copyrighted. I have successfully compiled and tested the programs under Visual Studio Dot Net.

Complete Bundle

code.zip
code.tar
code.tar.Z

Compilation Instructions

Visual Dot Net batch file; seems to work for Visual Studio 6.0 also.
Solaris, g++ 2.95 batch file. Note that some I/O is unsupported, so formattedOutput.cpp, lastChars.cpp, and concordance.cpp will need modificiations. Also, the exceptions in logic_error hierarchy are not implemented correctly. I have added exceptions.h with this implementation, and if the code is compiled with -DGNU_EXCEPTION_BUG, so header file will be included.
Borland 5.5 free compiler. You can get the free command line compiler at: ZDNet. Here's info on setup and using bcc32.

Basic Types and Control Structures

First.cpp: first C++ program
FirstProgram.java: first Java program

Functions, Arrays, String, and Parameter Passing

max2.h, max2.cpp, testMax2.cpp: separate compilation example
squares.cpp: uses vector to store perfect squares
stringConcat.cpp: illustrates that StringBuffers not needed
swap2.cpp: call-by-reference used to implement swap routine
binarySearchBad.cpp: bad binary search routine because of call-by-value
binarySearch.cpp: binary search routine with call-by-constant reference

Pointers and Reference Variables

stringPointer.cpp: allocates strings from memory heap
leak.cpp: illustrates memory leak (on some machines)
stale.cpp: illustrates stale pointers, via returning pointer to stack-allocated local variable
returnStatic.cpp: illustrates returning pointer to static local variable

Object-Based Programming: Classes

deepIntCellBad.cpp: Data member is a pointer, so default Big-Three is no good
deepIntCell.cpp: Data member is a pointer, with correct Big-Three
intQueue1.cpp: Linked list queue implementation (version #1)
intQueue2.cpp: Linked list queue implementation (version #2), ListNode is friend
intQueue3.cpp: Linked list queue implementation (version #3), ListNode is nested class
intQueue4.cpp: Linked list queue implementation (version #4), ListNode is nested struct
refreturn.cpp: Two versions of findMax show difference between return by constant reference and return by value
IntCell.h, IntCell.cpp, TestIntCell.cpp: IntCell class declaration, implementation, and test program
Ticket.h, Ticket.cpp, TestTicket.cpp: Ticket class declaration, implementation, and test program illustrates static members
MathUtils.h, MathUtils.cpp, TestMathUtils.cpp: MathUtils class declaration, implementation, and test program illustrates static initializer

Operator Overloading

MatrixOfDouble.h, TestMatrixOfDouble.cpp: MatrixOfDouble class and test program
Rational.h, Rational.cpp, TestRational.cpp: Rational class declaration, implementation, and test program

Object-Oriented Programming: Inheritance

inherit1.cpp: Person and Student class
shapes.cpp: Illustrates abstract classes and polymorphism with collections in C++
interfaces.cpp: Illustrates multiple interface inheritance in C++
multiple.cpp: Illustrates multiple implementation inheritance in C++
privateInheritance.cpp: Illustrates private inheritance in C++
hiding.cpp: Illustrates hiding of base class member functions

Templates

findMax.cpp: findMax function template
ambiguous.cpp: Illustrates ambiguous calls to max
ObjectCell1.h, TestObjectCell1.cpp: Illustrates class template, without separate compilation
Matrix.h, TestMatrix.cpp: Illustrates Matrix class template
ObjectCell.h, ObjectCell.cpp, ObjectCellExpand.cpp, TestObjectCell.cpp: Illustrates class template, with separate compilation and explicit instantations
memberTemplates.cpp: member templates
funcObjects1.cpp: function objects using Java style Comparator
funcObjects2.cpp: function objects using Java style Comparator, but no inheritance
funcObjects3.cpp: function objects using C++ style overloading operator()

Abnormal Flow Control

bad1.cpp: Illustrates that uninitialized variables generate at most a warning in C++
bad2.cpp: Illustrates that type confusion is allowed in C++
bad3.cpp: Illustrates that const can be thrown away
bad4.cpp: Illustrates that array indexes are not checked
atexitDemo.cpp: Illustrates the use of atexit
assertDemo.cpp: Illustrates the use of assert
exceptionDemo.cpp: Illustrates the use of exceptions

Input and Output

readData.cpp: Function template to read array of items, with error checking
formattedOutput.cpp: Illustrates manipulators for formatted output
getlineDemo.cpp: Illustrates an implementation of getline
lastChars.cpp: Prints end of a file
TwoInts.java: Java code uses StringBuffer to reads lines containing exactly two ints
twoInt1s.cpp: C++ code uses istringstream to reads lines containing exactly two ints (version 1, block local istringstream)
twoInt2s.cpp: C++ code uses istringstream to reads lines containing exactly two ints (version 2, single istringstream)
toString.cpp: Function template for toString using ostringstream

Collections: The Standard Template Library

printContainer.cpp: Prints STL containers, including maps
heterogeneousContainers.cpp: STL containers storing objects related by inheritance
printReverse.cpp: Prints container in reverse, using both forward iterators and reverse iterators
queueDemo.cpp: Illustrates queue adapter
heterogeneousSet.cpp: STL set storing objects related by inheritance; uses function object
mapDemo.cpp: Illustrates two ways to acccess values in a map
concordance.cpp: Generates a concordance

Primitive Arrays and Strings

getInts.cpp: Reads an umlimited number of ints using array doubling
pointerHopping.cpp: Illustration of pointer hopping
testEcho.cpp: Echo program
printEnvironment.cpp: Prints environment variables
twoD.cpp: Two dimensional primitive arrays is not pretty

C-Style C++

printDebug.cpp: Illustrates macro for debugging prints
reinterpretCast.cpp: Illustrates reinterpret_cast
swapPtr.cpp: Illustrates C-style simulation of call-by-reference via pointers
friday13.cpp: Illustrates mktime and asctime
copyFile.cpp: Copying files using C-style I/O
getlineFastDemo.cpp: Uses fgets to implement faster getline
lastCharsInC.cpp: Prints end of a file, using C-style I/O
qsortDemo.cpp: Illustrates qsort
varargsDemo.cpp: Illustrates variable-length argument lists

Using Java and C++: The JNI

HelloNativeTest.java, HelloNative.h, HelloNative.cpp: Simple native method to print hello world
Date.java, TestDate.java, Date.h, Date.cpp: Native method to implement (three different ways) printDate method in Date
StringAdd.java, StringAdd.h, StringAdd.cpp. StringAdd.c: Native method to implement (two different ways in C++, one way in C) string concatenation method add
NativeSumDemo.java, NativeSumDemo.h, NativeSumDemo.cpp: Native method to implement (two different ways both with and without exceptions) the sum method to add elements in an array
StringStuff.java, StringStuff.h, StringStuff.cpp: Native method that illustrates DeleteLocalRef
Hello.java, InvokeHello.cpp : Illustrates invocation API