learnxinyminutes-docs/c++.html.markdown
eternalthinker 7b95a1e921 Added correct syntax for c++ inheritance.
[more] Minor indent correction at namespaces intro example
2014-09-24 08:42:21 +05:30

8.0 KiB

language filename contributors lang
c++ learncpp.cpp
Steven Basart
http://github.com/xksteven
en

I am writing this to highlight the differences and additions that C++ has with respect to C. My suggestion would be to follow the C tutorial first then look here for the additions and differences.

///////////////////////////////////////   
// C++ differences   
///////////////////////////////////////  


//In C++   
//cannot use void main()   
int main() { //or int main(int argc, char **argv)   
    //cannot end with return;   
    return 0;   
    //Can also end without return statement   
}   
   
//In C++  
/*    
  //This could lead to compiler errors and is discouraged    
  //#if 0 #endif pairs are encouraged instead   
*/   
   
//In C++    
sizeof(10) //Typically 4   
sizeof('c') == 1    

//In C   
sizeof('c') == sizeof(10) //true chars are passed as ints   


//In C++ strict prototyping   
void func(); //function which accepts no arguments   

//In C   
void func(); //function which may accept arguments    


//In C++   
for(int i = 0; i < 10; i++) {;}   
//In C must int i must be declared before   


//C++ Supports Function overloading   
//Provided each function takes different   
//parameters    

void printing(char const *myString)    
{printf("String %s\n",myString);} //Hello   

void printing(int myInt)    
{printf("My int is %d",myInt);} //15   

int main ()    
{   
    printing("Hello");   
    printing(15);   
}   
   


//C++ Default Function Arguments   
void two_ints(int a = 1, int b = 4);   

int main()   
{    
    two_ints();            // arguments:  1, 4   
    two_ints(20);          // arguments: 20, 4   
    two_ints(20, 5);       // arguments: 20, 5   
}   


//C++ added the nullptr which is different from 0   
int *ip = nullptr;      // OK   
int value = nullptr;    // error: value is no pointer  


///////////////////////////////////////   
// C++ Additions ontop of C    
///////////////////////////////////////   


///////////////////////////////////////   
// C++ Namespace   
///////////////////////////////////////   

//Namespaces allow you to define your own    
//functions and variables for use    

// Use '::' to change variable (or function) scope   
// Putting '::' before a function or variable will   
// reference a global scope    

// This allows you to make normal c library calls   
// std is for standard library    
using namespace std;   

#include <stdio.h>    

int counter = 50;                // global variable    

int main()   
{   
    for (int counter = 1;        // this refers to the   
    counter < 2;                 // local variable   
    counter++)   
    {   
        printf("Global var %d local var %d\n",    
            ::counter,           // global variable    
            counter);            // local variable    
        // => Global var 50 local var 1   
    }   
}   

// Namespaces can be nested   


namespace myFirstNameSpace   
{   
    namespace myInnerSoul   
    {   
        cos(int x)   
        {   
            printf("My inner soul was made to program.");   
        }   
    }   
}   

namespace anotherNameSpace  
{   
    cos(int x) {;} //does nothing   
}   
   
int main()   
{   
    //Specify the full path because main is outside of both namespaces.    
    //Will print out My inner soul was made to program.    
    myFirstNameSpace::myInnerSoul::cos(60);   
}   


///////////////////////////////////////   
// C++ Strings   
///////////////////////////////////////   

//Strings in C++ are Objects and have many functions  
myString = "Hello";   
myOtherString = " World";   

myString + myOtherString; // => "Hello World"    

myString + ' You'; // => "Hello You"   

myString != myOtherString; //True   

//An example of a string method   
myString.append(" Dog"); // => "Hello Dog"   


///////////////////////////////////////   
// C++ Input Output   
///////////////////////////////////////   

//C++ input and output streams   
//cin, cout, cerr, << is insertion and >> is extraction operator   
#include <iostream>   

using namespace std;   

int main()   
{   

   int myInt;   
    
   //Prints to stdout (or terminal/screen)   
   cout << "Enter your fav number:\n";   
   //Takes in input   
   cin >> myInt;   

   //cout can also be formatted   
   cout << "Your fav number is " << myInt << "\n";   
   //Your fav number is ##  

   cerr << "Used for error messages";   
}   


///////////////////////////////////////   
// C++ Classes   
///////////////////////////////////////


//First example of classes   
#include <iostream>   

//define a class    
class Doggie   
{   
    std::string name;   
    int         weight;   

   // These are only the declarations   
   //Can also have private and protected   
   public:     
       //The public methods (can also include variables)   

   // Default constructor   
   Doggie();   

   void setName(std::string dogsName);   
   void setWeight(int dogsWeight);    
   void printDog();   

   //Can define functions within class declaration too   
   void dogBark() {std::cout << "Bark Bark\n"}   

   //Destructors are methods that free the allocated space   
   ~doggieDestructor();   
   //if no destructor compiler defines the trivial destructor   

//Classes are similar to structs and must close the } with ;    
};   

// This is the implementation of the class methods   
// Also called the definition   
void Doggie::Doggie () {   
    std::cout << "A doggie is born. Woof!\n";   
}   
 
void Doggie::setName (std::string doggie_name) {    
    name = doggie_name;   
}   

void Doggie::setWeight (int doggie_weight) {   
    weight = doggie_weight;   
}   

void Doggie::printDog () {   
    std::cout << "Dog is " << name << " weighs" << weight << "\n";    
}   

void Doggie::~doggieDestructor () {   
    delete[] name;   
    delete weight;    
}   

int main () {    
  Doggie deedee; // prints out a doggie is born. Woof!   
  deedee.setName ("Barkley");    
  deedee.setWeight(1000000);   
  deedee.printDog;   
  //prints => Dog is Barkley weighs 1000000    
  return 0;   
}   


//C++ Class inheritance   

class German_Sheperd : public Doggie  
{
   //This class now inherits everything public and protected from Doggie class

   //Good practice to put d_ in front of datatypes in classes   
   std::string d_type;   

   public:  
      void dogType() {d_type = "German Sheperd";}   
};   



///////////////////////////////////////   
// C++ Exception Handling   
///////////////////////////////////////    

try {   
   throw 12.25;  // throws a double no handler declared   
} catch (int errorNum)   
{   
  std::cout << "I caught an int " << errorNum << "\n";   
//default catcher   
} catch (...)   
{   
    std::cout << "I got an error. Not sure what but I can pass it up.";   
    throw;   
}   


///////////////////////////////////////    
// C++ Operator Overloading   
///////////////////////////////////////   

// In C++ you can overload operators such as +, -, new, etc.   

#include <iostream>   
using namespace std;   

class Vector {   
    public:   
        double x,y;   
        Vector () {};   
        Vector (double a, double b) : x(a), y(b) {}   
        Vector operator + (const CVector&);   
        Vector operator += (const CVector&);   
};   
 
Vector Vector::operator+ (const Vector& rhs)    
{   
    Vector temp;   
    temp.x = x + rhs.x;   
    temp.y = y + rhs.y;   
    return temp;   
}   

Vector Vector::operator+= (const Vector& rhs)   
{   
    x += rhs.x;   
    y += rhs.y;   
    return *this;   
}    

int main () {   
    Vector up (0,1);   
    Vector right (1,0);   
    Vector result;    
    // This calls the Vector + operator   
    // Vector up calls the + (function) with right as its paramater   
    result = up + right;   
    // prints out => Result is upright (1,1)   
    cout << "Result is upright (" << result.x << ',' << result.y << ")\n";   
    return 0;   
}

Futher Reading

for more resources see: http://www.icce.rug.nl/documents/cplusplus/
for other reference material: http://www.cplusplus.com/doc/tutorial/