Created
January 1, 2018 20:55
-
-
Save jkomyno/9b6d369a61b74755889517e6e3be30e4 to your computer and use it in GitHub Desktop.
OOP c++ virtual
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <vector> | |
#include <iostream> | |
class A { | |
private: | |
std::vector<int> data_; | |
public: | |
A() | |
{ | |
std::cout << "A()" << std::endl; | |
} | |
A(const std::vector<int>& data) : | |
data_(data) | |
{ | |
std::cout << "A(data)" << std::endl; | |
} | |
std::vector<int> GetData() const { | |
return this->data_; | |
} | |
}; | |
class B : public A { | |
private: | |
int number_1_; | |
int number_2_; | |
public: | |
B() | |
{ | |
std::cout << "B()" << std::endl; | |
} | |
B(int number_1, int number_2, const std::vector<int>& data) : | |
number_1_(number_1), | |
number_2_(number_2), | |
A(data) | |
{ | |
std::cout << "B(number_1, number_2, data)" << std::endl; | |
} | |
int GetN1() const { | |
return number_1_; | |
} | |
int GetN2() const { | |
return number_2_; | |
} | |
}; | |
class C : virtual public B { | |
private: | |
C(int number, const std::vector<int>& data) : | |
B(number, number, data) | |
{ | |
std::cout << "C(number, data)" << std::endl; | |
} | |
public: | |
C() | |
{ | |
std::cout << "C()" << std::endl; | |
} | |
C(const std::vector<int>& data) : | |
C(data.size(), data) | |
{ | |
std::cout << "C(data)" << std::endl; | |
} | |
}; | |
class D : public C { | |
private: | |
D(int number, const std::vector<int>& data) : | |
B(number, number, data) | |
{ | |
std::cout << "D(number, data)" << std::endl; | |
} | |
public: | |
D(const std::vector<int>& data) : | |
D(data.size(), data) | |
{ | |
std::cout << "D(data)" << std::endl; | |
} | |
}; | |
int main() { | |
D d({1,2,3,4}); | |
std::cout << "d.GetData().size() " << d.GetData().size() << std::endl; // 4 | |
std::cout << "d.GetN1() " << d.GetN1() << std::endl; // 4 | |
std::cout << "d.GetN2() " << d.GetN2() << std::endl; // 4 | |
return 0; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <vector> | |
#include <iostream> | |
class A { | |
private: | |
std::vector<int> data_; | |
public: | |
A() | |
{ | |
std::cout << "A()" << std::endl; | |
} | |
A(const std::vector<int>& data) : | |
data_(data) | |
{ | |
std::cout << "A(data)" << std::endl; | |
} | |
std::vector<int> GetData() const { | |
return this->data_; | |
} | |
}; | |
class B : public A { | |
private: | |
int number_1_; | |
int number_2_; | |
public: | |
B() | |
{ | |
std::cout << "B()" << std::endl; | |
} | |
B(int number_1, int number_2, const std::vector<int>& data) : | |
number_1_(number_1), | |
number_2_(number_2), | |
A(data) | |
{ | |
std::cout << "B(number_1, number_2, data)" << std::endl; | |
} | |
int GetN1() const { | |
return number_1_; | |
} | |
int GetN2() const { | |
return number_2_; | |
} | |
}; | |
class C : virtual public B { | |
private: | |
C(int number, const std::vector<int>& data) : | |
B(number, number, data) | |
{ | |
std::cout << "C(number, data)" << std::endl; | |
} | |
public: | |
C() | |
{ | |
std::cout << "C()" << std::endl; | |
} | |
C(const std::vector<int>& data) : | |
C(data.size(), data) | |
{ | |
std::cout << "C(data)" << std::endl; | |
} | |
}; | |
class D : public C { | |
public: | |
D(const std::vector<int>& data) : | |
C(data) | |
{ | |
std::cout << "D(data)" << std::endl; | |
} | |
}; | |
int main() { | |
D d({1,2,3,4}); | |
std::cout << "d.GetData().size() " << d.GetData().size() << std::endl; // 0 | |
std::cout << "d.GetN1() " << d.GetN1() << std::endl; // undefined | |
std::cout << "d.GetN2() " << d.GetN2() << std::endl; // undefined | |
return 0; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <vector> | |
#include <iostream> | |
class A { | |
private: | |
std::vector<int> data_; | |
public: | |
A() | |
{ | |
std::cout << "A()" << std::endl; | |
} | |
A(const std::vector<int>& data) : | |
data_(data) | |
{ | |
std::cout << "A(data)" << std::endl; | |
} | |
std::vector<int> GetData() const { | |
return this->data_; | |
} | |
}; | |
class B : public A { | |
private: | |
int number_1_; | |
int number_2_; | |
public: | |
B() | |
{ | |
std::cout << "B()" << std::endl; | |
} | |
B(int number_1, int number_2, const std::vector<int>& data) : | |
number_1_(number_1), | |
number_2_(number_2), | |
A(data) | |
{ | |
std::cout << "B(number_1, number_2, data)" << std::endl; | |
} | |
int GetN1() const { | |
return number_1_; | |
} | |
int GetN2() const { | |
return number_2_; | |
} | |
}; | |
class C : virtual public B { | |
private: | |
C(int number, const std::vector<int>& data) : | |
B(number, number, data) | |
{ | |
std::cout << "C(number, data)" << std::endl; | |
} | |
public: | |
C() | |
{ | |
std::cout << "C()" << std::endl; | |
} | |
C(const std::vector<int>& data) : | |
C(data.size(), data) | |
{ | |
std::cout << "C(data)" << std::endl; | |
} | |
}; | |
class D : public C { | |
+ private: | |
+ D(int number, const std::vector<int>& data) : | |
+ B(number, number, data) | |
+ { | |
+ std::cout << "D(number, data)" << std::endl; | |
+ } | |
public: | |
D(const std::vector<int>& data) : | |
- C(data) | |
+ D(data.size(), data) | |
{ | |
std::cout << "D(data)" << std::endl; | |
} | |
}; | |
int main() { | |
D d({1,2,3,4}); | |
std::cout << "d.GetData().size() " << d.GetData().size() << std::endl; // 4 | |
std::cout << "d.GetN1() " << d.GetN1() << std::endl; // 4 | |
std::cout << "d.GetN2() " << d.GetN2() << std::endl; // 4 | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment