180 likes | 302 Vues
This overview explores key advanced data types in C++, including classes, structures, unions, and enumerations. Learn how to utilize classes for encapsulating data and member functions, structures for grouping related variables, unions for memory-efficient type storage, and enumerations for defining named integral constants. The differences between declarations, definitions, and their implications in memory management will also be discussed. By mastering these concepts, you can enhance your programming skills in CSCI 240, focusing on object-oriented and advanced programming techniques.
E N D
Constants, Declarations, and Definitions Advanced Programming Derived Data Types
Derived Data Types • Class • Structure • Union • Enumeration • Array • Function • Pointer • Reference CSCI 240: Computing II
Class • Collection of Homogeneous Objects • Information Hiding -- Data Members and Member Functions • #include <iostream>using std::cout; using std::endl;class student{ private: char* name; public: void add_name(char *ip1) { name = new char[10]; strcpy(name, ip1);} char* get_name() {return name;} }; main() { student s1; //object or instance s1.add_name("John"); cout << "Name: " << s1.get_name() << endl; } CSCI 240: Computing II
Structure • Collection of Objects a Having Meaningful Representation • A Class with ALL PUBLIC MEMBERS • struct date{ int day; char *month; int year; }; • #include <iostream>using std::cout; using std::endl;main() { struct date today; //object today.day = 15; today.month = "May"; today.year = 1995; cout << "Date is: " << today.month << " " << today.day << " " << today.year << endl; } (There is a strong correlation between classes and structures.) CSCI 240: Computing II
Union • Objects to Occupy Same Area of Storage • Different Types at Different Times • struct circle{ int radius; }; struct triangle{ int side1; int side2; int angle; }; struct rectangle{ int side1; int side2; }; • union shape{ struct circle s1; struct triangle s2; struct rectangle s3; }; Using the correct name is critical. Sometimes you need to add a tag field to help keep track. It is important that the tag field be in the same location in every variant. CSCI 240: Computing II
Enumeration • Assigns Numerical Values to List of Identifiers • enum binary {zero, one}; enum number {one = 1, two, three}; enum boolean {False, True}; • main() { boolean x = False; if (x) {cout << "True!" << endl;} else {cout << "False!" << endl;} } CSCI 240: Computing II
Reference • An alias of an object • Must be initialized when defined • No operator acts on reference • Value of a reference cannot be changed after initialization – it always refers to the object it was initialized to. (Compile time, not run time.) • main(){ • int i = 10, &j = i; • j = 5; • cout << i; • } This is the first new C++ capability. You can’t do this in C. CSCI 240: Computing II
Object Storage • Persistent – alive after the program termination • Non-persistent – alive during the program execution • C++ allows only non-persistent objects • Automatic variables are allocated and destroyed automatically • Dynamic allocation is achieved by using new and delete operators. CSCI 240: Computing II
Constant Declarations • const Keyword Makes the Object Constant • const as a Prefix in a Pointer Declaration MAKES THE OBJECT POINTED TO BE A CONSTANT AND NOT THE POINTER! • Use of *const Makes the POINTER to be a CONSTANT CSCI 240: Computing II
Constant Declarations const int x = 10; /* x is a Constant Object */ const int y[] = {1, 2, 3, 4}; // y is a Array of Constant Objects const char *ptr = "csci220"; /* ptr: Pointer to a CONST OBJECT ptr[0] = 'R'; //ERROR!!! ptr = "Class_Notes"; /* ptr CAN POINT TO ANOTHER CONSTANT OBJECT! */ char *const cptr = "C++"; // cptr is a CONSTANT POINTER cptr[0] = 'c'; //LEGAL cptr = "Assignment"; //ERROR!! cptr CANNOT POINT TO // ANOTHER CONSTANT OBJECT! const char* const dptr = "Simple_Language"; /* dptr is a CONSTANT POINTER pointing to a CONSTANT OBJECT */ dptr[0] = 's'; //ERROR!! dptr = "Difficult_Language"; //ERROR!! CSCI 240: Computing II
Declaration • Describes the form of an Object • DOES NOT Reserve Any Storage • Initialization is NOT Allowed Definition • Creates an Instance • Creates an Instance • Reserves a Storage • Initialization is Allowed • All Objects MUST BE DEFINED BEFORE THEIR USE CSCI 240: Computing II
Declaration != Implementation • Function Without Body • Contains extern Specifier and NO Initializer or Function Body • Static Member in the Class Declaration • Class Name Declaration • typedef Declaration CSCI 240: Computing II
Examples • /* Definitions */ int i, j; //storage is reserved int k = 10; //initialization /* Declarations */ int my_function(); //function extern int x; //external variable struct S; //structure typedef int INT; //typedef /* Implementation */ int my_function() { int i = 100; return(i); } CSCI 240: Computing II
Incomplete Declarations • Dimension is Not Specified • Class/Structure Body is Not Specified • Completed By Subsequent Declaration • struct S; //incomplete S *ps; //Acceptable S s1; //ERROR struct S { int x; char *ptr; }; // Complete Declaration S s2; //FINE int array[]; //incomplete int array[5]; //FINE CSCI 240: Computing II
Typedef • Defines an Alias for Previously Defined Data Type • Does NOT Create a New Type • Makes Programs Readable typedef int INT; //INT => int INT x; //x is an integer variable INT y[10]; //Array typedef int *INT_PTR; //Pointer to int INT_PTR ptr; //ptr is a pointer to int /* Unnamed Class or Struct in a "typedef" gets the typedef as its name */ typedef struct { int p; char *q; } S; //struct is called S S my_struct; //instance of S CSCI 240: Computing II
Interpretation of Declaration • Order of Evaluation Depends Upon the Precedence and Associativity • int (*fun[])(); • /* Explanation 1. () Alter the Order of Evaluation 2. [] has Highest Precedence => fun is an array of 3. *fun[] => Pointers to 4. () => Functions Returning (required) 5. int => Integers ==> fun is an array of pointers to functions returning integers */ CSCI 240: Computing II
Scope Resolution Operator (::) • Can declare local and global variable of same name. • In C, the local variable takes precedence over the global variable throughout its scope. • In C++, the scope resolution operator is used to access the variable of the same name in an outer block. • Example • int i; main() { int i; i = 35; ::i = 34; cout << "Local i = " << i << endl; cout << "Global i = " << ::i << endl; } CSCI 240: Computing II
Acknowledgements • These slides were originally produced by Rajeev Raje, modified by Dale Roberts. CSCI 240: Computing II