Presentation is loading. Please wait.

Presentation is loading. Please wait.

C++ Class Members Class Definition – class Name – { – public: » constructor(s) » destructor » function members » data members – protected: » function members.

Similar presentations


Presentation on theme: "C++ Class Members Class Definition – class Name – { – public: » constructor(s) » destructor » function members » data members – protected: » function members."— Presentation transcript:

1 C++ Class Members Class Definition – class Name – { – public: » constructor(s) » destructor » function members » data members – protected: » function members » data members – private: » function members » data members – }; - 1 -

2 C++ Class Members Class Definition - Data Members – Data Members It is important to note ….. – Each class instance gets distinct copies of all data members - 2 -

3 C++ Class Members Class Definition - Data Members - 3 - class MyClass { public: MyClass() { myValue = 10; } int getMyValue () { return myValue;} int setMyValue (int aValue) { myValue = aValue;} private: int myValue; }; int main(void) { MyClass inst0, inst1; inst1.setMyValue(20); cout << inst0.getMyValue() << endl << inst1.getMyValue() << endl; return 0; }

4 C++ Class Members Class Definition - Function Members – Function Members Unlike data members Only one instance of each function member exists for a class Unless the function is declared inline - 4 -

5 C++ Class Members Class Definition - Function Members – Function Members If only a single instance….. – How are data members which function manipulates – bound to the function instance????? What is not shown – The member function has a hidden argument – The arg is a pointer to the object that was sent the message – Pointer is identified by the keyword this - 5 -

6 C++ Class Members Class Definition - Function Members – Function Members The this pointer  Has type ClassType  Contains the address of the class instance through which the member function was invoked  Starting address is same as the address of the first variable in the class structure - 6 -

7 C++ Class Members Class Definition - Function Members – Function Members Every nonstatic function member has a pointer implicitly declared – ClassName * const this; this is initialized to point to the object for which the member function was invoked Because this is declared const – It cannot be changed – Object pointed to can - 7 -

8 C++ Class Members Class Definition - Function Members – Function Members Since this is a pointer to the beginning of the class structure – One can select elements using pointer notation » this -> myElement To refer to the entire instance….. – *this – return *this » Will produce a copy of the instance as the return value - 8 -

9 C++ Class Members Managing Storage - Object Creation – When a C++ object is created 2 events occur…….. Storage is allocated for the object The constructor is called to initialize the storage – Storage allocation occurs in several ways and at different times - 9 -

10 C++ Class Members Managing Storage - Object Creation – Static Storage Allocated when the program begins Constant for the life of the program – Stack Storage allocated on the stack when an execution point is reached - Opening curly brace. Released at the complementary execution point - closing curly brace. – Heap - Free Store Storage is dynamically allocated from the heap at runtime - 10 -

11 C++ Class Members Managing Storage - Object Creation – Declaration Introduces a name Tells the compiler what the name means Usually go into header files – Definition Allocates storage for the name - 11 -

12 C++ Class Members Managing Storage - Object Creation – Variable  The compiler determines the variable size and generates space  If there is an initializing value, the value entered into that storage  Compile time storage usually allocated at the opening brace  Constructor not called until sequence point where object defined  Auto storage will be allocated on the stack – Function  Compiler generates code and allocates storage to hold the code  Storage for function has an address that can be produced using  Function name with no arg list  Address of operator  Usually go into implementation files - 12 -

13 C++ Class Members Managing Storage - Linkage – Linkage Describes storage to represent an identifier as seen by linker – Internal » Storage created for identifier for file being compiled » Name may be used in other files without conflict – External » Single piece of storage for all files being compiled » Accessed from other files by keyword extern » Variables defined outside functions » Inline function definitions default to external linkage – Automatic (local) Variables » Exist on the stack while function being called » Auto variables have no linkage - 13 -

14 C++ Class Members Managing Storage - Inline Functions – Inline Functions C++ permits specification of inline functions Identified by keyword inline … the definition of function follows syntax inline type functionName (argsi) { body } When inline definition encountered – No code generated – Code remembered and substituted for each function call - 14 -

15 C++ Class Members Static Data Members – A class is a type not a data object – When an instance of a class is defined….. The instance gets a copy of all data members – If data member declared static Single copy – Shared by all instances of the class Smalltalk – Pool variables - 15 - class M char a static int b m0 char a m1 char a m2 char a m3 char a int b

16 C++ Class Members Static Data Members – syntax Declaration – static type varName; Definition – type ClassName :: varName Static member exists even if no class instances exist – Remain in scope of class – Can only be accessed from outside if declared public - 16 -

17 C++ Class Members Static Data Members  Storage for a static variable Must be explicitly reserved and initialized  Static can be declared within a class Definition and initialization must occur outside Class Can be only single definition  Static (nonclass) variables Initialized to 0 by default  Static class variables Cannot be initialized by the constructor - 17 -

18 C++ Class Members Initializing Static Data Members... - 18 - class SimpleClass { public: SimpleClass () {} SimpleClass (int aValue){myValue = aValue;} // static char myChar = 'c'; This is illegal static char myChar; private: static int myValue; }; // Define and initialize the static variables int SimpleClass::myValue = 10; char SimpleClass::myChar = 'a';

19 C++ Class Members – Static Data Members Static Data Member – Can appear as a default arg to a member function Non-static Data Member – Cannot appear as a default arg to a member function Within a class body….. – int a; – static int b; – int f1 ( int myValue0 = a ); // illegal – int f2 ( int myValue1 = b ); // ok - 19 -

20 C++ Class Members Static Data Members – A static data member can be an instance of the class of which it is a – member….. – A non-static can only point to an instance of it’s class. Within a class body – class F1 – { – public: » F1 *a;// ok » static F1 b;// ok » F1 c;// illegal – }; - 20 -

21 C++ Class Members Const Data Members – Class data members can be specified as const – Consequence Storage always allocated and must be initialized at point of definition – Initialization must occur in the constructor – Implemented via the initialization list Storage not allocated until instance created…... At that time, the const must be – Created – Initialized – Const variable persists for the lifetime of the instance - 21 -

22 C++ Class Members Static Function Members – Function members can be declared static – A static function has no this pointer – static function can access Directly – static members – enums and typedefs Indirectly – Regular members via. or -> through an explicit object - 22 -

23 C++ Class Members Static Function Members - 23 - class SimpleClass { public: //static int getMyNumber() {return myNumber;} requires an object static int getMyNumber() { return myValue;} static int getMyStuff(SimpleClass *myClass) {return myClass->myNumber;} static int getMyVal() {return myValue;} static char myChar; char myLetter; private: static int myValue; int myNumber; }; int SimpleClass::myValue=10; char SimpleClass::myChar = 'a';

24 C++ Class Members Static Function Members - 24 - int main() { SimpleClass myClass, yourClass, *myClassPtr = &myClass ; cout << SimpleClass::getMyStuff(myClassPtr) << endl; cout << myClass.myChar << " " << SimpleClass::myChar << endl; return 0; }

25 C++ Class Members Const Function Members – The keyword const can be placed after argument list of member – function syntax returnType functionName ( argsi ) const { function body }  Tells compiler that function – Can only read data members – Cannot write them  Member functions declared const – Can be called for non-const objects  Non-const member functions – Cannot be called for const objects. - 25 -

26 C++ Class Members Overloading Function Members – Functions can use same name in the same scope If signature is unique – Name plus signature – Uniquely identify function – Same holds true for member functions Same rules applied to disambiguate Must provide Implementation for each overloaded function - 26 -

27 C++ Class Members Operator Function Members – C++ defined operators can be overloaded to work on Class type – operands – Must take at least one class type argument syntax – operator X (args) { body } – X is the operator symbol being overloaded – args - as appropriate for implementation – body - implements the function - 27 -

28 C++ Class Members Operator Function Members – Invocation Assume + is overloaded – Infix expression syntax » A + B » A, B can be member or non-member instances – Function call syntax » A.operator+ (B) - 28 -

29 C++ Class Members Operator Function Members – Rules Because operator functions are invoked using the same syntax Operator functions... – 1.Must have the same number of arguments as language defined versions – 2.Must have the same precedence as the builtin operators…This cannot be overridden – 3.Cannot have default parameters – 4.Cannot override the predefined meaning - 29 -

30 C++ Class Members Operator Function Members Limitations – Because of the operator function syntax – 1. Certain user defined operators cannot behave – analogously to built in versions » Prefix version » operator++ () {} » Postfix version » operator++ (int) {} – 2. Some operators cannot be overloaded., ?: ::. * – 3. Some operators must be members only =, [ ], ( ), -> - 30 -

31 C++ Class Members Overloading Operators - 31 - class Complex { public: int im, re; Complex(int r=0, int i=0):re(r), im(i) { } Complex operator+ (Complex a1) {return Complex(re+a1.re, im+a1.im);} Complex& operator++ () { re += 1, im += 1; cout << “prefix" << endl; return Complex(re -1, im -1); } Complex& operator++ (int) { re+=1, im+=1; cout << "postfix" << endl; return *this; } };

32 C++ Class Members Operator Function Members – Member Left hand operand must be an instance of class overloading the operator – Unary » x.operator@() » x is class instance – Binary » x.operator(y) » x operator@ y » x is class instance - 32 -

33 C++ Class Members Operator Function Members – Non-Member If operator requires left hand operand of a different type…..  Must use non-member syntax  Must be declared friend if the operator requires access to – protected or private members – Unary » operator@(x) – Binary – operator@(x,y) » x operator@ y - 33 -

34 C++ Class Members Operators in Action – The Copy Constructor and the Assignment Operator There are many occasions when a copy of an object is needed  Object passed by value » x.func(y) » A copy of y is made and passed  Object returned by value  Object initialized by another object » ClassName x1 = x2 » A copy of x2 is made  Object assigned to another object » x1 = x2 » x2 is copied to x1 and » x1 is destroyed - 34 -

35 C++ Class Members Operators in Action – The Copy Constructor A constructor that…..  Takes a reference to an object of the same class as an – argument  Performs initialization on newly created objects  Used by compiler to copy objects by value – syntax » class X ( const class X& ) » class X ( class X& ) - 35 -

36 C++ Class Members Operators in Action – The Copy Constructor  If a copy constructor is not defined – Shallow bitwise copy performed - memcpy  If a copied object uses new to allocate memory when created – One must write a copy constructor  Copy constructor need only be written – If class object is passed by value  To prevent pass by value – Define a private copy constructor - 36 -

37 C++ Class Members Operators in Action – The Assignment Operator - operator=()  Called when one initialized object is to be assigned to a second.  The operator must serve as a destructor to the assignee object.  Can have a return value… –The most common is *this  Is not called for the declarations such as –ClassName object1 = object2 - 37 -

38 C++ Class Members Class Members - Friends – A class Definition…. Provides 3 levels of access to data and function members  public  protected  private - 38 - ClosedOpen

39 C++ Class Members Class Members - Friends – C++ provides means for more liberal access to non- public members – under specified set of conditions….. Nonmember designated as a friend of the class – Class friend is designated by Keyword friend Followed by class name Copyright 2006 Oxford Consulting, Ltd 1 February 2006 - 39 -

40 C++ Class Members Class Members - Friends – Once an object is designated as a friend…. It has access to non-public members as if they were public – If B is designated as friend of A » B can access A’s non-public members » A cannot access B’s - 40 -

41 C++ Class Members Class Members - Friends – Friend may be: 1. Class – friend class X; 2. A particular function – friend int sub (int y); 3. A particular class member – friend int Mult::get(); - 41 -

42 C++ Class Members Class Members - Friends – A friend does not have a this pointer unless it is a member function in – its own right Question: – If it is a member function which this pointer does it have » Class A a; » Class B b; » Let B be declared as a friend of A » The this pointer of a function bFunct() contains » the address of the class instance b - 42 -

43 C++ Class Members Class Members - Friends – Caveats and Problems,,,  Friends can have access to everything … this defeats data hiding.  Introduces extra coupling between classes.  Permits change of internal state from the outside.  Should use member functions not friends to change state. - 43 -


Download ppt "C++ Class Members Class Definition – class Name – { – public: » constructor(s) » destructor » function members » data members – protected: » function members."

Similar presentations


Ads by Google