(object oriented) Encapsulation Inheritance Polymorphism Dynamic Binding (base class) (derived class) 1
class Base { int I; void X(); void Y(); class Derived: public Base { private: int j; void z(); Derived j z() I X() Y() 2
class OLD { virtual void Action(); void OLD::Action(){ printf( This is an old class ); class New: public OLD { void Action(); void NEW::Action(){ printf( This is NEW class ); Action() New Action class Base{ virtual void Initialize(); void Base:: Initialize(){ /* class Derived: public Base{ void Initialize(); void Derived:: Initialize(){ Base::Initialize(); /* Base Initialize */ Derived Initialize */ 3
protected public, protected, private private protected public, protected, private public protected private 4
public class : public { /* */ public public protected public protected private class : private { /* */ private private public protected private private 5
public private public public private protected protected private private - class upcounter{ protected: int value; void set_val(int v) { value=v; void up() { value++; int get_val() { return value; 1 class counter: public upcounter{ void down() { value--; // upcounter a; counter b; a.set_val(5); b.set_val(8); for (int i=0;i<5;i++) { a.up(); b.up(); // for (i=0;i<10;i++) b.down(); cout << Value of counter a= << a.get_val() << \n ; // 10 cout << Value of counter b= ; // 3 6
- #include <math.h> class circle{ /* */ protected: double r; void set_radius(double a) { r=a; double area(){ return 4*atan(1)*r*r; class cylinder: public circle{ private: double h; void set_height(double a) { h=a; double area(){ double pi=4*atan(1); return pi*r*r*2+2*pi*r*h; circle c; cylinder b; c.set_radius(2); b.set_radius(2); b.set_height(2); cout << "Area of c ="<< c.area() <<"\n"; cout << "Surface of b="<< b.area() <<"\n"; Area of c=12.566371 Surface of b=50.265482 #include <stdlib.h> #include <conio.h> #include <time.h> - class Rockbox{ protected: int number; Rockbox(){ srand((unsigned)time(null)); number=1; void rock(){ number=rand()%9+1; int see(){ return number; class UnjustRock:public Rockbox{ void unjust(int); void UnjustRock::unjust(int no){ if ((no>=0)&&(no<=9)) number=n UnjustRock box1; cout << "; box1.rock(); cout<<box1.see()<<endl; cout<< "; box1.unjust(8); cout<<box1.see()<<endl; 7
#include <process.h> const int MAX=100; class Stack{ protected: int st[max]; int top; Stack(){ top=0; void push(int var){ st[++top]=var; int pop(){ return st[top--]; class Stack2:public Stack{ void push(int var); int pop(); - void Stack2::push( int var){ if (top<max) Stack::push(var); else { cout<<"\nerror:stack is full."; exit(1); int Stack2::pop(){ if (top>0) return Stack::pop(); else { cout<<"\n Error: Stack is empty."; exit(1); return -1; Stack2 s1; s1.push(110); s1.push(220); cout <<endl<<s1.pop(); // 220 cout <<endl<<s1.pop(); // 110 cout <<endl<<s1.pop(); ( ): ( ){ /* */ : Derived(int v): Base(v) 8
class Base{ Base(){ cout << In Base class\n ; class Derived: public Base{ Derived a; In Base class - #include <math.h> class vector2{ protected: double x,y; vector2(){x=0;y=0; vector2(double a, double b){ x=a; y=b; double len(){ return sqrt(x*x+y*y); class vector3: public vector2{ private: double z; vector3():vector2() {z=0; vector3(double a, double b, double c):vector2(a,b){ z=c; double len(){ return sqrt(x*x+y*y+z*z); vector2 p(3,-4); vector3 q(4,3,-5); cout << Length of point p= << p.len()<<endl; cout << Length of point q= << q.len()<<endl; 9
- class upcounter{ protected: int value; upcounter(){ value=0; upcounter(int v) { value=v; void up() { value++; int get_val() { return value; class counter: public upcounter{ counter():upcounter(){ counter(int v):upcounter(v) { void down() { value--; upcounter a(5); counter b(8); counter c; for (int i=0;i<5;i++) { a.up(); b.up(); for (i=0;i<10;i++) b.down(); cout << Value of counter a= <<a.get_val() << \n ; // 10 cout << Value of counter b= << b.get_val() << \n ; // 3 cout << "Value of counter c= " << c.get_val() <<"\n"; // 0 Step 1: Step 2: ( ): ( ){, ( ) 10
(1) class Base{ Base(){ cout << "Base class\n"; class Derived: public Base{ Derived():Base(){ Derived a; Base class Derived class // Derived(){ cout << "Derived class\n"; (2) class Base{ Base class Derived class 2 Base(){ cout << "Base class\n"; class Derived: public Base{ Derived(int j){ cout <<"Derived class " << j <<"\n"; Derived a(2); 11
(3) class Base{ Base(){ cout << "Base class\n"; Base(int j){ cout << "Base "<< j<<"\n"; class Derived: public Base{ Derived(int j):base (j){ cout <<"Derived class " << j <<"\n"; Derived a(2); Base 2 Derived class 2 (destructor) Step 1: Step 2: : class Base{ ~Base(){ cout<< In ~Base()\n ; class Derived: public Base{ ~Derived(){ cout<< In ~Derived()\n ; Derived p; In ~Derived() In ~Base() 12
(abstract class) (abstract class) 1. 2. ( ) (multiple inheritance) C++ (multiple inheritance) Derived Base1 Base2 Base 1 Base2 Base1 Base2 Derived 13
class : public 1, public 2 { private private : class Derived: public Base1, public Base2{ /* */ void set_grade(int n){ grade=n; #include <string.h> int get_grade(){ return grade; class man{ char name[20]; class student: public man, public cis{ int age; void disp(){ void set_name(char *p){ cout << Grade= <<grade<< \n ; strcpy(name,p); cout << Name= <<name<< \n ; char* get_name(){ return name; class cis{ // student john; protected: int grade; john.set_grade(1); john.set_name( John ); john.disp(); 14
- class A{ int x; void y(); class B{ int x; void y(); class C: public A, public B{ void set(); void C::set(){ x=0; // // y(); // :: :: : void C::set(){ A::x=0; B::y(); 15
class : public 1, public 2 : ( ): 1( ), 2( ) 1 2 class Base1{ Base1(){ cout<< Base 1\n ; class Base2{ Base2(){ cout<< Base 2\n ; class Derived: public Base1, public Base2{ Derived():Base1(),Base2(){ cout<< Derived class\n ; Derived a; Base 1 Base 2 Derived class 16
class : public 1, public 2 : ~ () 2 1 class Base1{ Base1(){ cout<<"in Base1\n"; ~Base1(){ cout<<"in ~Base1\n"; class Base2{ Base2(){ cout<<"in Base2\n"; ~Base2(){ cout<<"in ~Base2\n"; class Derived:public Base1, public Base2{ Derived():Base2(),Base1(){ cout << "In Derived\n"; ~Derived(){ cout << "In ~Derived\n"; Derived p; In Base1 In Base2 In Derived In ~Derived In ~Base2 In ~Base1 17