C++ Primer
C++ Primer by HPO SOFT November 2003 | | | | --- | --- | --- | | | Introduction This primer is designed to give an overview of C++. Detailed syntax is beyond the scope of the Primer. It is not the goal of the Primer to teach one to program in C++, but to give those curious a better idea what C++ is all about. To learn C++ it is suggested that one take a professional course in it. Such courses are usually available at Community Colleges and Universities as well as on-line. An excellent Free course is available from CodeWarriorU (www.codewarrioru.com). What is C++ C++ is a powerful computer programming language. With C++ the sky is the limit as to what kind of program you can create. Unless you are exceptionally gifted, don’t plan on learning C++ overnight. Or in less than 6 months, even if you are very smart. In the early 1970’s Bell Laboratories experimented with new programming languages. In 1972 Dennis Ritchie of Bell Laboratories working with Ken Thompson on the UNIX operating system, developed the “C” programming language. One may wonder “why C?” Actually Thompson had developed a “B” language (which probably came from an “A” try) which was used as a basis for the “C” language. By the way, there is a D programming language. D was conceived in December 1999 by Walter Bright. D is a general purpose systems and applications programming language. It is a higher level language than C++, but retains the ability to write high performance code and interface directly with the operating system API’s and with hardware. D is well suited to writing medium to large scale million line programs with teams of developers. D is easy to learn, provides many capabilities to aid the programmer, and is well suited to aggressive compiler optimization technology. For more information about D, check http://digitalmars.com/d/index.html. C gives the programmer nearly complete control over a computer. C programs are written in plain text or ASCII. This is known as source code. The “source code” is then complied into “object code.” Object code is the one and zero language of computers. Object code is very compact (all comments and non-required code are stripped out) and runs very fast. While not impossible to, at least go partially backward and produce source code, the compiled object code offers a fair amount of protection from those who would steal your ideas. Compiled standard console versions (this is what is known as command line interface where just the keyboard is used, no mouse interaction and no graphics) run on most any platform with no modifications as long as the source code is compiled for the platform being used. For graphical user interfaces, special calls are made for each platform. In 1989 the American National Standards Institute(ANSI) adopted a standard for C. This version of C is known as C89. C89 was later adopted by the International Standards Organization (ISO) and was slightly amended in 1995. Standards are very important. One can invest a lot of time and money learning a language. Standards assure that the language will be widely accepted and around for the near future. So far we have been talking about C not C++. In 1979 Bjarne Stroustrup created C++. C++ is built on a foundation of C. It wasn’t until 1998 that an ANSI/IOS standard for C++ was adopted. Sometimes C89 is referred to as a “C subset of C++.” C++ uses most of C89 plus much more. In fact, the C++ language syntax is nearly twice the size of C89. In 1999 a new ANSI/IOS for C was adopted. This new standard is C99. This includes most of C++ plus adds some new features. There are also some incompatibilities with both C89 and C++. At this time, C99 is not widely used and C++ still reins at the top. C++ is sometimes called an Object Oriented Program (OOP). C++ has also been called “C with Classes.” One can take advantage of many of the C++ features without ever using OOP or Classes. However, the ability to use them increases the power available. Basic Format of C++ All programs must have a main function. This is where the program starts and ends. Calls to other parts of the program are made from here. The main function can also have additional functions within main. The basic syntax formainis as follows: int main() { calls and functions; return 0; } or void main() { calls and functions; } The second version may not work properly with some compilers, however. Many may wonder what the void is all about. It simply means that the function does not return a value. In C and C++ you can put things in the**( )** area and values determined later in the program can be returned to this. Font Uppercase and Lowercase C and C++ characters are case sensitive. All keywords are lowercase. A trick to avoid using a keyword unintentionally is to include at least one uppercase letter in each non-keyword name. The following are treated as separate variables and functions. myfunction() Myfunction() // Guaranteed not to be a key word because of at least one uppercase character MyFunction() // Guaranteed not to be a key word because of at least one uppercase character myvariable Myvariable // Guaranteed not to be a key word because of at least one uppercase character MyVariable // Guaranteed not to be a key word because of at least one uppercase character Semicolons Almost all C and C++ statements end in semicolons. Leaving off a semicolon can produce a host of errors and many times the errors are not close to the lacking semicolon. Notes and Comments In C, putting notes and comments into the code was done with /* and */. /* Text Note Text Note Text Note */ This allowed large multi line sections to contain notes and be bracketed by the /* at the start and the */ at the end. In C++ a line of a note or comment can also use the /* and */, but the preferred way is to use a // at the start of each comment line. Everything on the line after the // is considered part of the note or comment. //Text Note //Text Note //Text Note MyFunction() //Text Note The // is helpful for long comments. If there is not a // at the start of line, then it’s not a note or comment. Input and Output With Standard Console mode both C and C++ programs are limited to keyboard input and screen display. To get data elsewhere (from an external device or connection) or to output data to a print or other device it is necessary to use platform specific calls. This is one more reason why porting a completed program between computer platforms (e.g., between MacOS and Windows) requires much more than just compiling source code in the new environment. In C the program used scanf() to input data from the keyboard and printf() to send data to the screen. printf(“What is the information?\n”);scanf(“%s”, data); printf(“The information is, %s\n”, data); The C program will display: What is the Information? The user enters: The Universe (return) The screen displays: The information is The Universe In C++ the basic input and output is done with cin and cout. When a C++ program begins execution, there are four built-in functions called “streams” that are opened automatically. Stream Meaning Default Device cin Standard Input Keyboard cout Standard output Screen cerr Standard error output Screen clog Buffered version of cerr Screen There are also wide character version of each of the above; wcin, wcout, wcerr and wclog. Multibyte and Wide Character The cin is used with >> or cin >> and the cout is used with << or cout <<. The >> is an input operator and called the extractor because extracts data from the input stream. The << is an output operator and called theinserter because inserts data into the output stream. The above C example using the C++ cin/cout would be cout << “\nWhat is the information?” << endl; cin >> data; cout << “\nThe information is ” data<< endl; The C++ program will display: What is the Information? The user enters: The Universe (return) The screen displays: The information is The Universe Backslash Codes Note: The Backslash Codes are the same in C and C++ and are used for formatting the display text. Code Meaning \b backspace \f form feed \n new line \r carriage return \t horiznatal tab \” double quote \’ single quote \o null \\ backslash \v verticle tab \a alert \? question mark \N octal constant (N= value \xN hexadecimal constant (N= value) Data Hierarchy Bits At the bottom of the data hierarchy is a bit. A bit and be in one of two states. The states used in computers are one and zero and are equivalent to true and false and a plus voltage and zero voltages (or some voltage range). Bytes Bytes are normally eight bits. This provided 256 combinations. Characters and functions can be represented by bytes. In ASCII the uppercase “A” is represented by 10000001 and the lowercase “a” by 01100001. Wide Characters and Multibyte Characters Some C/C++ compilers support double-byte Kanji, Chinese/Taiwanese and Korean characters. This support is enabled using a compiler switch. The switch is -zk{0,1,2} where 0=Kanji, 1=Chinese/Taiwanese and 2=Korean. Wide characters are much simpler than multibyte characters. They are simply characters with more than eight bits, so that they have room for more than 256 distinct codes. The wide character data type,wchar_t, has a range large enough to hold extended character codes as well as old-fashioned ASCII codes. An advantage of wide characters is that each character is a single data object, just like ordinary ASCII characters. Wide characters also have some disadvantages: * A program must be modified and recompiled in order to use wide characters at all. * Files of wide characters cannot be read by programs that expect ordinary characters. Wide character values 0 through 0177 are always identical in meaning to the ASCII character codes. The wide character value zero is often used to terminate a string of wide characters, just as a single byte with value zero often terminates a string of ordinary characters. The basic element of text is represented as type Character. A variable of type character can hold, well, a character. More precisely, something of type Character can represent any one of the 256 possible characters in the “Latin-1” set. Type Character is sufficient for handling most languages written using Latin-based characters, such as English, French, and Spanish. Latin-1 is a superset of the ASCII character set (also called ISO 646), so Character is the right type for processing ASCII text files. If you need to handle non-Latin alphabets (such as Chinese or Arabic) you would use Wide_Character instead of Character. A Wide_Character can represent any character from the entire ISO 10646 character set. Fields A field is made of one or more bytes or characters. A variable or a constant is a field. Myfield is an example. Records A record contains sets of fields with common information for the record. In C and C++ this is a template and can be a Structure. In C++ a Class is a template or structure for a record and an Object is each data filled record that is created (known as being instantiated). Files A file contains sets of a given type of record (all the same fields) with different data in each record. Basic Pointers Both C and C++ use pointers. In both C and C++: An ampersand symbol & (& foraddress of) in front of a variable name indicates that you want the address of the variable rather than the value of the variable. X = &D // The address of the variable D into X.****// It is said that X now points to (the address of) variable D. By contrast using the asterisk * the value of the variable is accessed. X = *D // the value at address D is put into X or p = &x // the address of x is put into p *p = 25 // the value 25 is put into the address p (formerly the address of x) Example: // Using pointers void swap (int*x, *y) { int temp; temp = *x; // save the value a address x in temp *x = *y // put y in x *y = temp; // put****temp (or original x) into y } calling the function swap() int a, b; a= 25; b = 67; swap(&a, & b) // a is now 67 and b is now 25 Pointers to Class Members C++ allows a special type of pointer to be generated that “points” generically to a member of a class (pointer to a member), not to a specific instance of that member in an object. This is not the same as a normal C++ pointer. A pointer to a member provides only an offset into an object of the member’s class. To access the member of a class given a pointer to it (the class), special operators are sued (.* and ->*). The .* operator is used to access a reference to an object. To access an object the ->* is used. The form used to declare a pointer to a member is: type class-name:: *ptr; C Structures In C, the structures must contain only data members. There are no private, public and protected parts. An example of a structure in C: struct Time { int Hour; int Min; int Second; }; C++ Structures In C++ structures are classes. The only real difference is that whileprivate is default for a classes, public is default for structures in C++” Example of a C++ Structure: struct ClassName { public: // Default // definitions of public elements // (usually functions) private: // definitions of private elements // (usually stored data) friend void Myfunction() //Myfunction has access to the private members protected: // definitions of protected elements // (usually stored data) }; Classes Classes are the key to C++. Originally Bjarne Stroustrup (the creator of C++) called it “C with Classes,” but the name was quickly shortened to C++. There are no classes in C. The class is C++‘s basic unit of encapsulation. As mentioned above a Class is a template from which objects are created. A class is defined using the class keyword. A class is a collection of variables and functions that manipulate those variables. The variables (fields) that form a class are called members. The following is the general format for aclassdeclaration (the order of private, protected and public is not important): class ClassName { private: // default // definitions of private elements // (usually stored data) friend void Myfunction() //Myfunction has access to the private members protected: //definitions of protected elements //(usually stored data) public: //definitions of public elements //(usually functions) }; In the above example, if no type is specified, it is implied the elements and variables will be private. private: Available only within the class and designated friends. protected: Available only within the class and derived classes. public: Available to all in the program. Friends If necessary you can override the private or protected access by declaring a class a friend of another class. Friend classes have access to the variables and functions of the class to which they are designate as friends. Example: class MyWork { friend Staff; private: Mystuff() … public: … protected**:** … }; This means that all parts of th Staff class have access to all parts of the MyWork class (private, public and protected). To declare a friend function, include the keyword friend followed by the function’s prototype name from the class to which the function will be a friend. friend Mystuff Objects As one might expect Objects are the basis for Object Oriented Programming. What is an Object? An object is an entity that has data that describe it and actions that it can perform. An object is something that has physical existence, e.g., an airplane, a person or an event. This can sometimes be a very confusing point for those learning C++. To create an object of a class just specify the class name and object name. Example: MyClass Stuff // The object Stuff is created using the members of class MyClass Spacecraft Devices // The object Devices is created using the members of class Spacecraft Constructors and Destructors No, this is not about Civil Engineering with cranes and bulldozers. Constructors A constructor is used to initialize class members by setting variables equal to zero (default) or some other value. A constructor does not have return values. Constructors take the class name. There can be multiple constructors in a class. There are multi flavors of constructors, default, parameterized, explicit, implicit, overloaded, copy and convert constructors. Default Constructors A default constructor is a constructor that can be invoked with no arguments/parameters. There can only be one default constructor per class. If one is not stated in the code by the programmer, the compiler will create one. Example: class Data { Data(); // Default constructor { } }; Parameterized Constructors A parameterized constructor is just one that has parameters specified in it. Example: class Data { Data(float, int, char); // Parameterized constructor { } }; or class Data { Data(float x, int y, char a); // Parameterized constructor { } }; Explicit Constructors The keyword explicit is a Function Specifier.” The explicit specifier applies only to constructors. Any time a constructor requires only one argument either of the following can be used to initialize the object. The reason for this is that whenever a constructor is created that takes one argument, it also implicitly creates a conversion from the type of that argument to the type of the class. A constructor specified as explicit will be used only when an initialization uses the normal constructor syntax, Data (x). No automatic conversion will take place and Data = x will not be allowed. Thus, an explicit constructor creates a “nonconverting constructor.” Example: class Data { explicit Data(float x); // Explicit constructor { } }; Implicit Constructors If a constructor is not stated as explicit, then it is by default an implicit constructor. Overloaded Constructors The same constructor name can be used with multiple cases of the constructor. The whole string is used by the compiler to identify the constructor, not just the constructor name. Example: class Data { Data(); // Default constructor { } Data(int y, int z); // Overloaded constructor Data() { } Data(int a, int b), float c); // Overloaded constructor Data() { } }; Copy Constructors One of the more important forms of an overloaded constructor is the copy constructor. The purpose of the copy constructor is to initialize a new object with data copied from another object of the same class. Example: class Data (Data); // Class Data declares a copy constructor Data { Data :: Data (Data Test) // Implemented { Stuff } }; or class Data // Class Data declares a copy constructor Data { Data (); // Default constructor Data (Data & ) // Copy constructor Data (const Data & ) // Copy constructor { Stuff } }; In both copy constructors in the second example, the parameter type is a reference. You cannot create a copy constructor using the class tag as this will create an error. If a copy constructor is not defined, the compiler will provide one. Convert Constructors A convert constructor is an alternative to overloading. It is a method in which a constructor is used to convert a non-class member object to a class member object. Example: class Data { public: Data () // Default constructor { xyz = “Unknown”; } Data (const string& a) // Convert constructor { xyz= a; } Data (const char* a) // Convert constructor { xyz= a; } stuff private: string xyz; }; Destructors A destructor performs termination house keeping. Destructors clear up memory. Destructors are used primarily with classes with dynamic allocated memory. A destructor receives no parameters and returns no value. There may be only one destructor in a class. Destructors cannot be overloaded. Example: class Time { Time(); //Default constructor ~Time(); // Destructor }; Namespaces In C++, it is possible to create local scope using the namespace keyword. A namespace defines a declarative region. Its purpose is to localize names. The format is: namespace MyNameSpace { int count; } Here, MyNameSpace is the name of the namespace with the variable count declared inside it. When C++ was originally invented, items declared in the C++ library were in global (i.e., unnamed) namespace. However, Standard C++ puts all those items into the std namespace. Hence: using namespace std; Operators Dot (.) Operator The dot operator accesses a structure or class member via the variable name for the object or via a reference to the object. Example cout << Data.Stuff This will display the member Stuff of the structure referenced by Data. Scope Resolution (::) Operator The scope resolution operator specifies the scope to which a member belong. Example Data::MyStuff Data is the class or namespace that contains the member MyStuff. To reference a global scope, the scope name is not specified. For example to refer to a global variable called MyData that is being hidden by a local variable called MyData, use :: MyData Polymorphism Polymorphism is the ability to have classes in the same inheritance hierarchy respond differently to the same message. A program is using polymorphism when member functions in different classes have the same signature, but differ in content of the function body. Example: #include
More on 4D (4th Dimension) database & low code app development tutorials
Browse our latest guides and reviews.
Read more →