Programming in C++ Michal Brabec Petr Malý. Class / Struct Class / Struct consists of: data members...

11
Programming in C++ Michal Brabec Petr Malý

Transcript of Programming in C++ Michal Brabec Petr Malý. Class / Struct Class / Struct consists of: data members...

Page 1: Programming in C++ Michal Brabec Petr Malý. Class / Struct Class / Struct consists of: data members function members constructors destructor copy constructor.

Programming in C++Michal Brabec

Petr Malý

Page 2: Programming in C++ Michal Brabec Petr Malý. Class / Struct Class / Struct consists of: data members function members constructors destructor copy constructor.

Class / Struct

• Class / Struct consists of:

• data members

• function members

• constructors

• destructor

• copy constructor

• assignment operator

• other operators

• conversion operators

Page 3: Programming in C++ Michal Brabec Petr Malý. Class / Struct Class / Struct consists of: data members function members constructors destructor copy constructor.

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

Page 4: Programming in C++ Michal Brabec Petr Malý. Class / Struct Class / Struct consists of: data members function members constructors destructor copy constructor.

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

Page 5: Programming in C++ Michal Brabec Petr Malý. Class / Struct Class / Struct consists of: data members function members constructors destructor 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

Page 6: Programming in C++ Michal Brabec Petr Malý. Class / Struct Class / Struct consists of: data members function members constructors destructor copy constructor.

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

Page 7: Programming in C++ Michal Brabec Petr Malý. Class / Struct Class / Struct consists of: data members function members constructors destructor copy constructor.

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

Page 8: Programming in C++ Michal Brabec Petr Malý. Class / Struct Class / Struct consists of: data members function members constructors destructor copy constructor.

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

Page 9: Programming in C++ Michal Brabec Petr Malý. Class / Struct Class / Struct consists of: data members function members constructors destructor copy constructor.

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

Page 10: Programming in C++ Michal Brabec Petr Malý. Class / Struct Class / Struct consists of: data members function members constructors destructor copy constructor.

Task

• Create operator + for MyArray class

• The operator concatenates two arrays

• Create a conversion operator to std::vector

Page 11: Programming in C++ Michal Brabec Petr Malý. Class / Struct Class / Struct consists of: data members function members constructors destructor copy constructor.

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