Next Previous Contents

1. Introduction

The purpose of this document is to provide you with a comprehensive list of URL pointers and programming tips on C++. Also, this document provides a C++ library having Java-like String class, string tokenizer, memory functions and many other functions, which can be used in general C++ applications. Also various examples are given here which demonstrate the usage of this library.

This document is not a textbook on C++, and there are already several excellent "on-line Text books" on internet. If you are new to C++ and you never programmed in C++, then it is strongly suggested that you first read the online C++ Textbooks given in the chapter C++ Online Textbooks and then follow the subsequent chapters. It is suggested that you purchase a textbook on C++ for reference from online bookstores like amazon or barnes.

1.1 C++ v/s Java

C++ is one of the most powerful language and will be used for a long time in the future inspite of emergence of Java. C++ runs extremely fast and is in fact 10 to 20 times FASTER than Java. Java byte-code is slower when running in a VM than the equivalent natively compiled code. Java runs faster with JIT (Just-In-Time) compiler, but it is still slower than C++. And optimized C++ program is about 3 to 4 times faster than Java (with JIT compiler). Then, why do people use Java? Because it is pure object oriented and is easier to program in Java, as Java automates memory management, and programmers do not directly deal with memory allocations. This document attempts to automate the memory management in C++ to make it much more easy to use. The library given here will make C++ look like Java and will enable "C++" to compete with Java language.

Because of manual memory allocations, debugging the C++ programs consumes a major portion of time. This document will give you some better ideas and tips to reduce the debugging time.

1.2 Which one Ada95, "C", "C++", Java or PHP ??

Language choice is very difficult. There are too many parameters - people, people skills, cost, tools, politics (even national politics) and influence of businessmen/commercial companies. The best language based on technical merits does not get selected simply due to political decisions!

See the language comparison chart of David Wheeler at Ada comparison chart. Ada got 93%, Java 72%, C++ 68% and C got 53%. C++ and Java are closer in points (only 4% difference), hence Java is not a very big revolution as compared to C++. Development costs of Ada is half of C++ as per Stephen F. Zeigler. Ada95 is available at -

The C++ compiler is lot more complex than "C" compiler and C++ programs may run bit slower than "C" programs. But speed difference between "C" and "C++" is very minute - it could be few milli-seconds which may have little impact for real-time programming. Since computer hardware is becoming cheaper and faster and memory 'RAM' is getting faster and cheaper, it is worth doing code in C++ rather than "C" as time saved in clarity and re-usability of C++ code offsets the slow speed. Use compiler optimizer options like -O or -O3 to speed up C++ or C programs.

Nowadays, "C" language is primarily used for "systems programming" to develop operating systems, device drivers etc..

Note: Using the String, StringBuffer, StringTokenizer and StringReader classes given in this howto, you can code in C++ which "exactly" looks like Java. This document tries to close the gap between C++ and Java, by imitating Java classes in C++

If you want to bypass edit-compile-debug-compile cycle of C++ then see scripting languages like PHP which can be used for general purpose programming. Scripting languages like PHP, PERL enable rapid application development. PHP has some features of object-oriented programming. PHP is at http://www.linuxdoc.org/HOWTO/PHP-HOWTO.html.

Java is platform independent language more suitable for developing GUI running inside web-browsers (Java applets) but it runs very slow. You should prefer to use web-server-side programming with PHP, HTML, DHTML, XML to get better performance. Hence, the golden rule is "Web-server side programming use PHP and web-client side (browser) programming use Java applets". The reason is - the server-side OS (Linux) is under your control and never changes, but you will never know what the client side web-browser OS is. It can be Internet appliance device (embedded linux+netscape) or computers running Windows 95/98/NT/2000 or Linux, Apple Mac, OS/2, Netware, Solaris etc..

The advantage of Java language is that you can create "Applets (GUI)" which can run on any client OS platform. But the price you pay for cross-platform portability is the performance, applications written in Java run very slow.

Hence, Java runs on "client" and PHP/C++ runs on servers.

1.3 Problems facing the current C++ compilers

Since C++ is super-set of C, it got all the bad features of "C" language. Manual allocation and deallocation of memory is tedious and error prone (see Garbage Collector for C++).

In "C" programming - memory leaks, memory overflows are very common due to usage of features like -


        Datatype  char * and char[]
        String functions like strcpy, strcat, strncpy, strncat, etc..
        Memory functions like malloc, realloc, strdup, etc..

The usage of char * and strcpy causes horrible memory problems due to "overflow", "fence past errors", "memory corruption", "step-on-others-toe" (hurting other variable's memory locations) or "memory leaks". The memory problems are extremely hard to debug and are very time consuming to fix and trouble-shoot. Memory problems bring down the productivity of programmers. This document helps in increasing the productivity of programmers via different methods addressed to solve the memory defects in "C++". Memory related bugs are very tough to crack, and even experienced programmers take several days or weeks to debug memory related problems. Memory bugs may be hide inside the code for several months and can cause unexpected program crashes. The memory bugs due to usage of char * and pointers in C/C++ is costing $2 billion every year in time lost due to debugging and downtime of programs. If you use char * and pointers in C++ then it is a very costly affair, especially if your program size is greater than 10,000 lines of code.

Hence, the following techniques are proposed to overcome the faults of "C" language. Give preference in the following order -

  1. Use references instead of pointers.
  2. Java style String class (given in this howto) or STDLib string class.
  3. Character pointers (char *) in C++ limit the usage of char * to cases where you cannot use the String class.
  4. Character pointers (char *) in C using extern linkage specification, if you do not want to use (char *) in C++.

To use "C char *", you would put all your "C" programs in a separate file and link to "C++" programs using the linkage-specification statement extern "C" -


extern "C" {
#include <stdlib.h>
}

extern "C" {
        comp();
        some_c_function();
}

The extern "C" is a linkage specification and is a flag that everything within the enclosing block (brace-surrounded) uses C linkage, not C++ linkage.

The 'String class' utilises the constructor and destructor features to automate memory management and provides access to functions like ltrim, substring, etc..

See also related 'string class' in the C++ compiler. The string class is part of the standard GNU C++ library and provides many string manipulation functions. Because the C++ 'string class' and 'String class' library provides many string manipulation functions, there is less need to use the character pointer approach to write your own string functions. Also, C++ programmers must be encouraged to use 'new', 'delete' operators instead of using 'malloc' or 'free'.

The 'String class' does everything that char * or char [] does. It can completely replace char datatype. Plus added benefit is that programmers do not have to worry about the memory problems and memory allocation at all.

1.4 COOP - C++ Object Oriented Programming-language

A problem with C++ is that it is a superset of C, and, although programmers can use the good (object oriented) features of C++ and avoid the bad features of C, there is nothing to force them to do so. So, many C++ programs are written with no object oriented features and continue to use the bad features of C that the use of C++ should have overcome.

Therefore, I propose that we create a new version of C++ that does not allow the use of the bad features of C.

I propose that this new version of C++ be called COOP (say koop), which is an acronym for C++ Object Oriented Programming-language" . COOP should be pronounced like chicken coop. (The logo of COOP language is a big fat Hen inside coop!) I propose that the file extension for COOP files be .coo, which will not conflict with .c for C programs or .cpp for C++ programs.

To begin with, write the COOP as a front end to C++. That is COOP pre-processes the code syntax and then uses the standard C++ compiler to compile the program. COOP acts as a front end to C++ compiler. (To start with, COOP will be a very good project/thesis topic for university students)

The following are some other proposed features of COOP:

Also borrow ideas from -


Next Previous Contents