Programming in C++ Michal Brabec Petr Malý. Class / Struct Class / Struct consists of: data members...
-
Upload
cathleen-watson -
Category
Documents
-
view
220 -
download
0
Transcript of Programming in C++ Michal Brabec Petr Malý. Class / Struct Class / Struct consists of: data members...
Programming in C++Michal Brabec
Petr Malý
Class / Struct
• Class / Struct consists of:
• data members
• function members
• constructors
• destructor
• copy constructor
• assignment operator
• other operators
• conversion operators
Copy Constructor
• ClassName(const ClassName& obj) { }• All members are copied to the members of a
new object
• Compiler generates default implementation
• Used together with assignment operator
Assignment Operator
• ClassName& operator=(const ClassName& obj);
• Compiler generates default implementation
• All members are assigned to members of a new object
• Used together with copy constructor
Task
• Use the solution of the second task (MyArray) from the last practicals
• Create a global function Replace which takes three arguments
• InputArray
• ElementToFind
• NewElement
• Function returns a new copy of MyArray where all ElementToFind are replaced for NewElement
• Verify your soulution using Test class as element type of your array
Shallow Copyclass MyClass {public: int* member1; int member2; int member3;};
MyClass myClass1;myClass1.member1 = new int[3] { 1, 2, 3};myClass1.member2 = 4;myClass1.member3 = 5;
MyClass myClass2 = myClass1;myClass1.member1[0] = 1000;
cout << myClass1.member1[0] << endl; // 1000cout << myClass1.member1[1] << endl; // 2cout << myClass1.member1[2] << endl; // 3cout << myClass1.member2 << endl; // 4cout << myClass1.member3 << endl; // 5
cout << myClass2.member1[0] << endl; // 1000cout << myClass2.member1[1] << endl; // 2cout << myClass2.member1[2] << endl; // 3cout << myClass2.member2 << endl; // 4cout << myClass2.member3 << endl; // 5
addr
4myClass1:
1000
2 3
5
addr
4myClass2: 5
Deep Copyclass MyClass {public: int* member1; int member2; int member3;
MyClass() = default; MyClass(const MyClass& obj) : member2(obj.member2), member3(obj.member3) { member1 = new int[3]; for (int i = 0; i < 3; ++i) member1[i] = obj.member1[i]; }}; MyClass myClass1;
myClass1.member1 = new int[3] { 1, 2, 3};myClass1.member2 = 4;myClass1.member3 = 5;
MyClass myClass2 = myClass1;myClass1.member1[0] = 1000;
cout << myClass1.member1[0] << endl; // 1000cout << myClass1.member1[1] << endl; // 2cout << myClass1.member1[2] << endl; // 3cout << myClass1.member2 << endl; // 4cout << myClass1.member3 << endl; // 5
cout << myClass2.member1[0] << endl; // 1cout << myClass2.member1[1] << endl; // 2cout << myClass2.member1[2] << endl; // 3cout << myClass2.member2 << endl; // 4cout << myClass2.member3 << endl; // 5
addr
4myClass1:
1 2 3
5
addr
4myClass2: 5
1000
2 3
Operators
• RetType operator op (Args) { }• Defined as members of a class
• Some operators may be defined outside the class
• friend keyword is used to allow to access to private class members
Conversion Operators
• operator Type (Args) { }• Defined as members of a class
• Return type is not at the beginning of the declaration
• Result is returned by value
Task
• Create operator + for MyArray class
• The operator concatenates two arrays
• Create a conversion operator to std::vector
Task (optional)
• Use code from previous practicals
• Create a program which loads the complex numbers from the file
• The program stores the number ordered by their absolute value
• Use STL functions / containers