Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- using namespace std;
- class A {
- public:
- explicit A(int num = 0)
- : number{num} {
- cout << "A constructor" << endl;
- }
- A(const A& other) {
- number = other.number;
- cout << "A copy constructor" << endl;
- }
- ~A() {
- cout << "A destructor" << endl;
- }
- virtual string toString() const {
- return "A: " + to_string(getNumber());
- }
- int getNumber() const {
- return number;
- }
- private:
- int number;
- };
- class B : public A {
- public:
- B(int num = 0)
- : A(num) {
- cout << "B constructor" << endl;
- }
- ~B() {
- cout << "B destructor" << endl;
- }
- virtual string toString() const override {
- return "B: " + to_string(getNumber()) + " " + A::toString();
- }
- private:
- };
- ostream& operator<<(ostream& out, const A* obj) {
- out << obj->toString();
- return out;
- }
- ostream& operator<<(ostream& out, const A& obj) {
- out << obj.toString();
- return out;
- }
- int main()
- {
- A* obj = new A{'A'};
- B* obj2 = new B{'Z'};
- B obj3{'B'};
- vector<A*> v{obj, obj2, &obj3};
- for (auto item : v) {
- cout << item << endl;
- }
- /*
- cout << obj << endl;
- cout << obj2 << endl;
- cout << &obj3 << endl;
- cout << obj3 << endl;
- */
- delete obj2;
- delete obj;
- return 0;
- }
Add Comment
Please, Sign In to add comment