Presentation is loading. Please wait.

Presentation is loading. Please wait.

C++ Classes & Data Abstraction C & C++ differences Class definition Member function definitions Makefiles Utility functions Constructors Destructors.

Similar presentations


Presentation on theme: "C++ Classes & Data Abstraction C & C++ differences Class definition Member function definitions Makefiles Utility functions Constructors Destructors."— Presentation transcript:

1 C++ Classes & Data Abstraction C & C++ differences Class definition Member function definitions Makefiles Utility functions Constructors Destructors

2 C & C++ Differences C: procedural programming language –Programming is action-oriented –Function is basic unit of programming

3 C & C++ Differences C++: object-oriented programming language –Programming is object-oriented –Class (a user-defined data type) is basic unit of programming Attributes (data members) Behaviors or operations (member functions) –Objects are created (instantiated) from the class Variables are instances of built-in data types

4 Class Definition //Fraction abstract data type (ADT) definition class Fraction{ public://accessible anywhere in program Fraction(); //member function prototype void set(int, int); //member function prototype void print(); //member function prototype private://accessible only to member functions int num; //data member int den; //data member };//terminate class definition with a semicolon

5 Member Access Specifiers Public –Any data member or data function declared after this is accessible anywhere in the program Private –Any data member or data function declared after this is only accessible to member functions of the class –If no specifiers are declared, then the default is private –Can list specifiers in any order Protected –Used for inheritance

6 Member Function Definitions //Constructor initializes each data member Fraction::Fraction(){ num = 0; den = 1; } //Set a new Fraction value & check data void Fraction::set(int n, int d ){ if(d == 0) d = 1; if(d < 0) {d = -d; n = -n;} num = n; den = d; } //Print a Fraction void Fraction::print(){ cout << num << " / " << den; }

7 Driver Program // Driver program to test class Fraction void main(){ //instantiate object t of class Fraction Fraction t; t.print(); // 0 / 1 //set the data t.set( 13, -27); t.print(); // -13 / 27 //attempt invalid data t.set( 99, 0); t.print(); // 99 / 1 } (See complete program at fractionA.txt)fractionA.txt

8 Accessing Class Members class Fraction { public: Fraction(); void print(); int num, den; //Not good programming practice }; Fraction::Fraction() {num = 0; den = 1; } void Fraction::print(){cout<num = 2; ptr->den = 3; ptr->print();// 2/3 ref.num = 3; ref.den = 4; ref.print(); // 3/4 }

9 Accessing Class Members //Use accessor functions instead (accessor.txt):accessor.txt class Fraction { Private: int num, den; public: Fraction(); void print(); void setNum(int); void setDen(int); int getNum(); int getDen(); }; void Fraction::setNum(int n){num = n;} void Fraction::setDen(int d){if(d==0)d=1; den = d;} int Fraction::getNum(){return num;} int Fraction::getDen(){return den;}

10 Class Exercise Write a member function for class Function that will multiply two fractions –Here is a sample driver program that uses this function: void main(){ Fraction f1, f2; f1.set(2,3); f2.set(4,5); f1.multiply(f2); f1.print();// 8/15 f2.print(); //4/5 }

11 Multiple Files Header file (fraction.h)fraction.h –Declaration of the Fraction class –To prevent multiple inclusions of header file: #ifndef FRACTION_H #define FRACTION_H //header file code #endif Source-code file (fraction.cpp)fraction.cpp –Member function definitions At top of file: #include "fraction.h" Driver program (driver.cpp)driver.cpp –Program that uses the Fraction class At top of file: #include "fraction.h"

12 Makefile Don’t forget to: (See makefile)makefile –To change “gcc” to “g++” –To change “.c” to “.cpp” –To tab the beginning of the 2 nd line –To leave the 3 rd line & last line with a newline out: driver.o fraction.o g++ driver.o fraction.o -o out driver.o: driver.cpp fraction.h g++ -c driver.cpp fraction.o: fraction.cpp fraction.h g++ -c fraction.cpp

13 Interface & Implementation Separating interface from implementation –Good software engineering –Easier to modify a program Changing the implementation will not change the driver program (as long as the interface stays the same) –Clients of a software do not need the to access the class source code, just need the object code & header file For example, the driver program for class Fraction only needs fraction.h & fraction.o See makefilemakefile

14 Utility Functions Not all member functions are public Utility functions are private –Also called a helper function –Not part of a class interface –Supports the operation of member functions –Not intended to be used by the clients of a class

15 Utility Functions class Fraction { public: Fraction(); void set(int, int); void print(); private: void reduce(); int num, den; }; void Fraction::set( int n = 0, int d = 1){ if(d==0) d = 1; num = n; den = d; reduce(); }

16 Utility Functions //Finds GCD using Euclid's algorithm (utility.txt)utility.txt void Fraction::reduce(){ int a = num; int b = den; while (b!=0){ int temp = a % b; a = b; b = temp; } num = num / a; den = den / a; } void main(){ Fraction t; t.set(6, 4); t.print();// 3/2 }

17 Constructors A constructor is a class member function with the same name as its class –Used to initialize the class data members –Can have several overloaded to initialize data members in different ways –Data to be initialized is put in parenthesis to the right of the objects name –Constructors can also have default arguments

18 //Example of 3 overloaded constructors class Fraction { int num, den; //default is "private:" public: Fraction(); Fraction(int); Fraction(int, int); //Fraction(int = 0,int = 1);//default arguments }; Fraction::Fraction(){ cout<<"constructor1"<

19 Class Exercise Using the previous slide’s constructors, what’s the output of this program? void main(){ Fraction f1, f2(2), f3(3,4); Fraction f[5] = {Fraction(), Fraction(6), Fraction(7,8)}; } What would be the output, if only the constructor with default arguments was used? –See exercise2.txtexercise2.txt

20 Copy Constructor Called in three cases 1.When declaring an object in a program Fraction a; Fraction b(a); Fraction *c = new Fraction(b); 2.When declaring an object in a program (not the default assignment operator) Fraction a; Fraction b = a; 3.When passing-by-value void multiply(Fraction f)

21 Copy Constructor Can create your own copy constructor Fraction(const Fraction &f){ num=f.num; den=f.den; } –Otherwise the computer will create one for you –By default, performed by memberwise copy Each data member of one object is copied to another object’s data members Can cause problems with dynamically allocated data members

22 class Fraction { //What’s the output? public: Fraction(int n=0, int d = 1){ cout<<"constructor with default arguments"<

23 Destructors A destructor is a class member function with the same name as its class with a tilde (~) character in front of it –Called when an object is “destroyed” When program execution leaves the scope in which the object of that class was instantiated For global objects & static objects, when the program ends execution –Performs termination housekeeping so memory can be returned to the system

24 class Fraction { //What’s the output? int num, den; public: Fraction(int);//constructor ~Fraction();//destructor }; Fraction::Fraction(int n) { num = n; den = 1; cout<<"Con., Fra. ="<

25 Default Memberwise Copy Assignment operator (=) can be used to assign one object to another –By default, performed by memberwise copy Each data member of one object is copied to another object’s data members Can cause problems with dynamically allocated data members void main(){ Fraction f1, f2(3,4); f1 = f2; f1.print();// 3/4 f2.print(); // 3/4 }

26 Default Memberwise Copy If you were to write it yourself, it would look like this –Will talk more about this format in operator overloading –See complete program at copy.txtcopy.txt const Fraction &operator=(const Fraction &f){ num=f.num; den=f.den; return *this; }


Download ppt "C++ Classes & Data Abstraction C & C++ differences Class definition Member function definitions Makefiles Utility functions Constructors Destructors."

Similar presentations


Ads by Google