Classes

210 views
111 views

Published on

This is for the computer science students those who want a guide for understanding the concepts

Published in: Education, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
210
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Classes

  1. 1. Classes and Objects in C++ Data Types • Recall that C++ has predefined data types, such as int • int x; // Creates a specific instance of an // integer named x • C++ also predefines operations that can be used on integers, such as + and * Classes • Sometimes, a programmer will want to define a custom "thing" and the operations that can be performed on that "thing" • A class is the definition • An object is a particular instance of a class • Classes contain – data, called members – functions, called methods 1
  2. 2. Class Declaration class Class_name { public: member (data) definitions method (function) definitions private: member (data) definitions method (function) definitions }; // order of public and private can be reversed // data is seldom public // note semicolon after } Public and Private • Public members and methods can be accessed from outside the class and provide the interface • Private members and methods cannot be accessed from outside the class Data Hiding • Recall that many programmers can each write a small piece of a large program • Need to have some way to define how other programmers can use your stuff – Public methods are the only way for any other code to access the class • Need to have some way to keep other programmers from messing up your stuff – Private methods and members cannot be accessed from outside the class 2
  3. 3. Reusability and Changeability • Writing programs is expensive, so organizations try to reuse code and avoid changing it • If classes are well written, they can be reused in several programs • Also, the internals of a class can be rewritten - as long as the interface does not change, programs that use that class do not need to be changed Example 1 Create a counter. Other parts of the program should be able to increment the counter and read the counter class Counter { public: // constructor to initialize the object - note no function type Counter ( ) { currentcount = 0; }; // increment the counter void count( ) { currentcount++; }; // get the current value of the counter int readcounter( ) { return currentcount; }; private: int currentcount; }; 3
  4. 4. Constructors • Constructors are methods that initialize an object – Must have same name as the class – Declaration is odd - no function type Counter ( ) { ..... } – Not required, but should be used when data needs to be initialized – Never explicitly called - automatically called when an object of this class is declared Destructors • Destructors are methods that clean up when an object is destroyed – Must have the same name as the class, but with a ~ in front – No function type in declaration ~ Counter ( ) { ..... } – Also not required, but should be provided if necessary to release memory, for example – Never explicitly called - automatically called when an object of this class is destroyed Creating an Object • To create an instance of class counter (called an object) declare it as you would any other variable Class_name object_name(s); – This automatically calls the constructor method to initialize the object Counter my_counter; 4
  5. 5. Using an Object • Using a public method is similar to a function call object_name.method_name (arguments) my_counter.count( ); int current = my_counter.readcounter( ); Using an Object • Common error - using the class name instead of the object name Counter.count ( ); // WRONG! my_counter.count ( ); // RIGHT! • Common error - trying to use private members or methods outside the class cout << currentcount ; // WRONG! cout << my_counter.readcounter ( ); // RIGHT! Putting It All Together #include <iostream> using namespace std; 5
  6. 6. class Counter { public: // constructor to initialize the object Counter ( ) { currentcount = 0; }; // increment the counter void count( ) { currentcount++; }; // get the current value of the counter int readcounter( ) { return currentcount; }; private: int currentcount; }; int main ( ) { // declare two objects Counter first_counter, second_counter; // increment counters first_counter.count( ); second_counter.count( ); second_counter.count( ); //display counts cout << "first counter is " << first_counter.readcounter( ) << endl; cout << "second counter is " << second_counter.readcounter( ) << endl; return 0; } Output first counter is 1 second counter is 2 6
  7. 7. Global Scope • Anything declared outside of a function, such as the class in this example or a variable, can be used by any function in the program and is global • Anything declared inside a function can only be used in that function • Usual to declare classes to be global • Global variables are bad programming practice and should be avoided Function Prototypes in Class Declarations • In the previous example, the functions (methods) were completely declared within the class declaration • Often more readable to put only function prototypes in the class declaration and put the method implementations later • use class_name::method_name when declaring the methods • This is the usual convention class Counter { public: Counter ( ); void count( ); int readcounter( ); private: int currentcount; } Counter::Counter ( ) { currentcount = 0; } void Counter::count ( ){ currentcount ++; } int Counter::readcounter ( ){ return currentcount ; } 7
  8. 8. Identifying Classes • Often, it is not immediately obvious what the classes should be to solve a particular problem • One hint is to consider some of the nouns in the problem statement to be the classes. The verbs in the problem statement will then be the methods. Example 2 • Write a program that manages a checkbook. The user should be able to set the original account balance, deposit money in the account, remove money when a check is written, and query the current balance. Example 2 class CheckBook public methods are init, deposit, check, and query Pseudocode for main program display menu and get user choice while user does not choose quit Set starting balance: get the amount, call init Deposit: get amount, call deposit Write a check: get amount, call check Balance: call query, display balance display menu and get user choice 8
  9. 9. Example 2 Program #include <iostream> #include <iomanip> using namespace std; Class Declaration class CheckBook{ private: float balance; public: CheckBook ( ); void init (float); void deposit (float); void check (float); float query ( ); }; //constructor // set balance //add deposit //subtract check //get balance Class Method Declarations CheckBook::CheckBook ( ) { balance = 0; } void CheckBook::init (float money) { balance = money; } void CheckBook::deposit (float money) { balance = balance + money; } void CheckBook:: check (float money){ balance = balance - money; } float CheckBook:: query ( ){ return balance; } 9
  10. 10. Menu Function int menu ( ) { int choice; cout << "0: Quit" << endl; cout << "1: Set initial balance" << endl; cout << "2: Deposit" << endl; cout << "3: Deduct a check" << endl; cout << "4: Find current balance" << endl; cout << "Please enter your selection: "; cin >> choice; return choice; } int main ( ) { int sel = menu ( ); // get initial user input float amount; CheckBook my_checks; // declare object // loop until user enters 0 to quit while (sel != 0) { // set initial balance if (sel == 1) { cout << "Please enter initial balance: "; cin >> amount; my_checks.init(amount ); } // deposit else if (sel == 2) { cout << "Please enter deposit amount: "; cin >> amount; my_checks.deposit (amount): } // checks else if (sel == 3) { cout << "Please enter amount of check: "; cin >> amount; my_checks.check (amount); } // balance inquiry else if (sel == 4) { cout << fixed << setprecision(2); cout << "The balance is " << my_checks.query ( ) << endl; } // get next user choice sel = menu ( ); } // end while return 0; } 10
  11. 11. Example 3 • Write a class Can that calculates the surface area, volume, and weight of a can surface area = 2p r(r+h) volume = p r2h weight (aluminum) = 0.1oz/in2 of surface area weight (steel) = 0.5 oz/in2 of surface Class Can class Can { private: float radius, height; char material; // S for steel, A for aluminum public: Can (float, float, char); float volume ( ); float surface_area( ); float weight ( ); }; Methods // constructor has arguments Can::Can(float r, float h, char m){ radius = r; height = h; material = m; } float Can::volume( ) { return (3.14 * radius * radius * height); } 11
  12. 12. Methods float Can::surface_area ( ){ return ( 2 * 3.14* radius * (radius + height)); } float Can::weight ( ) { if (material == 'S') return ( 0.5 * surface_area( )); else return (0.1 * surface_area( ) ); } Main int main ( ) { Can popcan(1, 5, 'A'); cout << "Aluminum popcan is about 5 inches high and 1 inch in diameter." << endl; cout << "Volume is " << popcan.volume( ) << " cubic inches" << endl; cout << "Surface area is " << popcan.surface_area ( ) <<" square inches" << endl; cout << "Weight is " << popcan.weight ( ) << " ounces" << endl; return 0; } Output Aluminum popcan is about 5 inches high and 1 inch in diameter. Volume is 15.7 cubic inches Surface area is 37.68 square inches Weight is 3.768 ounces 12
  13. 13. C++ has built-in classes • Recall that to create an input file, use // class definition in fstream #include <fstream> // class is ifstream, object is input_file ifstream input_file; //close is a method of ifstream input_file.close ( ); String Class #include <string> //class definition here // class is string, object is my_name string my_name; // Can set the object directly my_name = "Joan"; // methods cout << my_name.length( ); //4 //substring of length 2 starting from character 0 cout << my_name.substr(0, 2); //Jo 13

×