OOP344 - FjXR - 20102

From CDOT Wiki
Jump to: navigation, search

We are FjXR, Code fixers are ready to go!

Group member

TERM 20102
ID First Name Last Name Section Seneca Id wiki id IRC nick Blog URL
A Xiongwen Lu xlu44 A xlu44 xlu44 xlu44 my blog
B Junseok Park A Junseok jpark68 jpark68 My Blog
C Richard Hui A rhui4 Rhui4 Rhui4 My Blog
D Priya Gill A pkgill5 priya pkgill5 My Blog
E Liang Wang lwang168 A lwang168 lwang168 lwang168 my blog

Notification Window

<embed id="emb_1275427285642" src="http://fjxr.chatango.com/group" width="250" height="360" wmode="transparent" allowScriptAccess="always" allowNetworking="all" type="application/x-shockwave-flash" allowFullScreen="true" flashvars="cid=1275427285642&b=60&f=50&l=999999&q=999999&r=100&s=1"></embed>

Coding Style

  • References from the books of "Thinking in C++ (2nd Edition) by Bruce Eckel" and " Programming Windows with MFC (2nd edition) by Jeff Prosise, Microsoft Press "
  • download the book here.

Thinking in C++,Volume 1, 2nd Edition by Bruce Eckel
Volume 2: Standard Libraries & Advanced Topics

Common Hungarian Notation Prefixes

Prefixes are often combined to form other prefixes, as when p and sz are joined to form psz, which stands for "pointer to zero-terminated string."


 int nCount = 45 ;
 char szUserName[20];
 char* pszUserName[20];
 char cLetter = 'a' ;

Prefix Data Type
c or ch char
cx, cy Horizontal or vertical distance
h Handle
n int
p Pointer
sz Zero-terminated string
f float

File names

to use .cpp for implementation files and .h for header files.
Note that when including Standard C++ header files,
the option of having no file name extension is used,
i.e.: #include <iostream>.

Parentheses, braces, and indentation

the opening brace should always go on the same line as the “precursor” (by which I mean “whatever the body is about: a class, function, object definition, if statement, etc.”). This is a single, consistent rule I apply to all of the code I write, and it makes formatting much simpler. It makes the “scannability” easier – when you look at this line:


 int func(int a);

you know, by the semicolon at the end of the line, that this is a declaration and it goes no further, but when you see the line:


 int func(int a) {

you immediately know it’s a definition because the line finishes with an opening brace, not a semicolon. By using this approach, there’s no difference in where you place the opening parenthesis for a multi-line definition:


 int func(int a) {
    int b = a + 1;
    return b * 2;

and for a single-line definition that is often used for inlines:


 int func(int a) { return (a + 1) * 2; }

Placing the ‘{‘ on the next line eliminates some confusing code in complex conditionals, aiding in the scannability. Example:


    && cond2
    && cond3) {

The above has poor scannability. However,


 if (cond1
 && cond2
 && cond3)

breaks up the ‘if’ from the body, resulting in better readability. Finally, it’s much easier to visually align braces when they are aligned in the same column. They visually "stick out" much better.

Identifier names

The style is quite straightforward. The first letter of an identifier is only capitalized if that identifier is a class. If it is a function or variable, then the first letter is lowercase. The rest of the identifier consists of one or more words, run together but distinguished by capitalizing each word. So a class looks like this:


 class FrenchVanilla : public IceCream {

an object identifier looks like this:


 FrenchVanilla myIceCreamCone(3);

and a function looks like this:


 void eatIceCreamCone();

(for either a member function or a regular function).

Include guards on header files

Include guards are always used inside header files to prevent multiple inclusion of a header file during the compilation of a single .cpp file. The include guards are implemented using a preprocessor #define and checking to see that a name hasn’t already been defined. The name used for the guard is based on the name of the header file, with all letters of the file name uppercase and replacing the ‘.’ with an underscore. For example:


 // IncludeGuard.h
 // Body of header file here...

Use of namespaces

if you change the namespace outside of a function or class, you will cause that change to occur for any file that includes your header, resulting in all kinds of problems. In cpp files, any global using directives will only affect that file, and so you are generally used to produce more easilyreadable code, especially in small programs.


 #include <cstdlib> // malloc() & free()
 #include <cstring> // memset()
 #include <iostream>
 using namespace std;