Casting Templates

W
Description

Casting Templates document sample

Shared by: emj68678
-
Stats
views:
15
posted:
12/15/2010
language:
English
pages:
21
Document Sample
scope of work template
							          Introduction to C++
•   Compiling & makefile
•   Example program
•   Inline functions
•   Reference variables
•   Unary scope resolution operator
•   Casting
•   Overloading
•   Templates
                         C++
•   C++ is an enhanced version of C
    –   Object-oriented-programming capabilities
    –   Other improvements on C features
    –   Is a “superset” of C
        •   Can compile C programs with C++ compiler
•   Development
    –   Bjarne Stroustrup at Bell Labs in early 1980’s
    –   From C & Simula-67
    –   Originally called “C with classes”
    –   Later changed to “C++”
    Compiling C++ Programs
• For C++ files, end with “.cpp”
• In UNIX, use “g++” compiler
    % g++ program.cpp
    % ./a.out
  or:
    % g++ program.cpp –o output
    % ./output
           Makefile in C++
• Save following as        • Type in “make” to
  “makefile”                 run the makefile
 output: program.o              % make
                                g++ -c program.cpp
 <tab>g++ program.o -o output
                                g++ program.o -o output
 <blank line>
                                % ./output
 program.o: program.cpp
 <tab>g++ -c program.cpp
 <blank line>
//A program that adds 2 integers
#include <iostream>
   using std::cout;
   using std::endl;
   int main(){
      int int1 = 0;
      cout << "Enter an integer: ";
      std::cin >> int1;
      int int2 = 0;
      cout << "Enter another integer: ";
      std::cin >> int2;
      int sum = int1 + int2;
      cout<<int1<<"+"<<int2<<"="<<sum<<endl;
      return 0;
}
   Comments & Header Files
//A program that adds 2 integers
  – Use “//” at the beginning of each line for
    comments
#include <iostream>
  – Preprocessor directive
  – Input/output stream header file
     • List of standard library header files (p. 560)
  – For programmer-defined header files
     • #include “myHeaderFile.h”
           Output & Input
cout << "Enter an integer: ";
  – Output values to the screen
  – Standard output stream (cout), or “see-out”
  – Stream insertion operator (<<), or “put to”
std::cin >> int1;
  – Obtain a value from the keyboard
  – Standard input stream (cin), or “see-in”
  – Stream extraction operator (>>), or “get from”
                 Namespaces
• Used to prevent overlapping names
• Defines a scope where names of functions
  & variables are placed
• using statement informs compiler that will
  use the std namespace
  – std is namespace for standard C++ library
  using std::cout;
  ...
  cout << "Enter an integer: ";
  std::cin >> int1;
#include <iostream>
int x = 3;
namespace Test{
  int x = 7;
  int cout(void);
}
void main(){
  std::cout<<"x="<<x<<std::endl;
     // x=3
  std::cout<<"Test::x="<<Test::x<<std::endl;
     // Test::x=7
  std::cout<<"Test::cout()="<<Test::cout();
     // Test::cout()=10
}
int Test::cout(void){return 10;}
         //Class Exercise 1
#include <iostream>
using namespace std;

void main(){
  char a[]="Hello World";
  a[0]+=0x20;
  a[6]+=0x20;
  cout << a << endl;
  for(int i=0; a[i]; i++)
     cout<<a[i];
  cout<<'\n';
} //See exercise1.cpp
           Inline Functions
• Putting the word inline before a function
  “advises” the compiler to generate a copy of
  the function, instead of making a function
  call
  – Help reduce function call overhead,
  – Increases textual size of program
  – Used for short functions
            Inline Functions
#include <iostream>
using namespace std;

inline int product(int a, int b){return a*b;}

void main(){
  int int1, int2;
  cout<<"Enter 2 integers: ";
  cin>>int1>>int2;
  cout<<"product="<<product(int1,int2)<<endl;
}
           Reference Variables
• Used as an alias for other variables
#include <iostream>
using std::cout;
using std::endl;
void main(){
  int a = 7;
  int &b = a; //put “&” in front of variable
  a++;
  cout<<"a="<<a<<" b="<<b<<endl;
}
  //a=8 b=8
          Reference Variables
• Used in functions for call-by-reference
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
//use “&” for call-by-reference
inline void square(int &a){a = a*a;}
void main(){
  int a = 2;
  cout<<"a="<<a<<endl; //a=2
  square(a);
  cout<<"a="<<a<<endl; //a=4
}
      Returning a Reference
• Can be “dangerous” to return reference
  variables from a function
  – If return a reference to a variable declared in a
    function, the variable must be declared static
  – If not declared static, then will return an
    undefined variable with unpredictable results
    (called a dangling reference)
     • Reference will refer to an automatic variable (an
       address on the stack) that is discarded (and
       possibly written over with a new value) when the
       function ends
           Default Arguments
• Can have default values for parameters
#include <iostream>
#define ONE 1
using namespace std;
inline int two(void){return 2;}
inline int vol(int a = 3, int b = two(),
     int c = ONE) {return a*b*c;}
void main(){
  cout<<"vol="<<vol()<<endl;      //vol=6
  cout<<"vol="<<vol(4)<<endl;     //vol=8
  cout<<"vol="<<vol(4,5)<<endl; //vol=20
  cout<<"vol="<<vol(4,5,6)<<endl;//vol=120
}
Unary Scope Resolution Operator
 • “::” provides access to a global variable
   when it has been hidden by a local variable
   #include <iostream>
   using standard std;
   int x = 5;
   void main(){
      int x = 10;
      cout<<"global x = "<<::x<<endl;
      cout<<"local x = "<<x<<endl;
   }
     //global x = 5
     //local x = 10
                Casting
• Use static_cast<variable-name>(argument)
#include <iostream>
using std::cout;
using std::endl;
void main(){
     int f=0;
     float c=0;
     cout<<"Fahrenheit\t Celsius\t\n";
     for(f=100;f>=0;f-=10){
          c = (static_cast<float>(5) / 9)
                    * (f - 32.0);
          cout<<f<<"\t\t"<<c<<endl;
     }
}
         Function Overloading
• Functions have same name, but different
  parameters
  #include <iostream>
  using standard std;
  inline int square(int a){return a*a;}
  inline double square(double a){return a*a;}
  void main(){
     cout<<"square = "<<square(3)<<endl;
          //square = 9
     cout<<"square = "<<square(3.3)<<endl;
          //square = 10.89
  }
          Function Templates
• Used for functions that have same operations, but
  different data types
  #include <iostream>
  using namespace std;
  template<class T>
    T square(T a){return a*a;}
  void main(){
    cout<<"square = "<<square(3)<<endl;
     //square = 9
    cout<<"square = "<<square(3.3)<<endl;
     //square = 10.89
  }
#include <iostream>     /*Class Exercise 2*/
using namespace std;
int d = 10;
inline int A(char b = 'b', char c = 'c') {
  return b-c;}
inline int A(int b, int c){
  return b/c;}
void main(){
  cout<<A()<<endl;
  cout<<A('d')<<endl;
  cout<<A('d','D')<<endl;
  int d = 20;
  cout<<A(d,::d)<<endl;
  int e = 'e', f = 'f';
  cout<<A(e,f)<<endl;
} //See exercise2.cpp

						
Related docs