support bazel complie this project and format code.
This commit is contained in:
23
practical_exercises/10_day_practice/day5/virtual/BUILD
Normal file
23
practical_exercises/10_day_practice/day5/virtual/BUILD
Normal file
@@ -0,0 +1,23 @@
|
||||
# please run `bazel run //practical_exercises/10_day_practice/day5/virtual:example2`
|
||||
# please run `bazel run //practical_exercises/10_day_practice/day5/virtual:init`
|
||||
# please run `bazel run //practical_exercises/10_day_practice/day5/virtual:seq`
|
||||
# please run `bazel run //practical_exercises/10_day_practice/day5/virtual:example1`
|
||||
|
||||
load("@rules_cc//cc:defs.bzl", "cc_binary")
|
||||
|
||||
cc_binary(
|
||||
name = "example2",
|
||||
srcs = ["example2.cpp"],
|
||||
)
|
||||
cc_binary(
|
||||
name = "init",
|
||||
srcs = ["init.cpp"],
|
||||
)
|
||||
cc_binary(
|
||||
name = "seq",
|
||||
srcs = ["seq.cpp"],
|
||||
)
|
||||
cc_binary(
|
||||
name = "example1",
|
||||
srcs = ["example1.cpp"],
|
||||
)
|
@@ -0,0 +1,17 @@
|
||||
/* 例1.cpp */
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
class A {
|
||||
public:
|
||||
void vf() { cout << "I come from class A" << endl; }
|
||||
};
|
||||
class B : public A {};
|
||||
class C : public A {};
|
||||
class D : public B, public C {};
|
||||
|
||||
int main() {
|
||||
D d;
|
||||
d.vf(); // error
|
||||
|
||||
return 0;
|
||||
}
|
@@ -0,0 +1,17 @@
|
||||
/* 例2.cpp */
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
class A {
|
||||
public:
|
||||
void vf() { cout << "I come from class A" << endl; }
|
||||
};
|
||||
class B : virtual public A {};
|
||||
class C : virtual public A {};
|
||||
class D : public B, public C {};
|
||||
|
||||
int main() {
|
||||
D d;
|
||||
d.vf(); // okay
|
||||
|
||||
return 0;
|
||||
}
|
39
practical_exercises/10_day_practice/day5/virtual/init.cpp
Normal file
39
practical_exercises/10_day_practice/day5/virtual/init.cpp
Normal file
@@ -0,0 +1,39 @@
|
||||
/* 派生类初始化.cpp */
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
class A {
|
||||
int a;
|
||||
|
||||
public:
|
||||
A(int x) {
|
||||
a = x;
|
||||
cout << "Virtual Bass A..." << endl;
|
||||
}
|
||||
};
|
||||
class B : virtual public A {
|
||||
public:
|
||||
B(int i) : A(i) { cout << "Virtual Bass B..." << endl; }
|
||||
};
|
||||
class C : virtual public A {
|
||||
int x;
|
||||
|
||||
public:
|
||||
C(int i) : A(i) {
|
||||
cout << "Constructing C..." << endl;
|
||||
x = i;
|
||||
}
|
||||
};
|
||||
class ABC : public C, public B {
|
||||
public:
|
||||
//虚基类由最终派生类初始化
|
||||
ABC(int i, int j, int k)
|
||||
: C(i), B(j), A(i) // L1,这里必须对A进行初始化
|
||||
{
|
||||
cout << "Constructing ABC..." << endl;
|
||||
}
|
||||
};
|
||||
int main() {
|
||||
ABC obj(1, 2, 3);
|
||||
|
||||
return 0;
|
||||
}
|
21
practical_exercises/10_day_practice/day5/virtual/readme.md
Normal file
21
practical_exercises/10_day_practice/day5/virtual/readme.md
Normal file
@@ -0,0 +1,21 @@
|
||||
<EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD><EFBFBD>µĶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><EFBFBD>ڶ<EFBFBD><EFBFBD>̳з<EFBFBD>ʽ<EFBFBD>£<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD><EFBFBD>˶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Աʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֳ<EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>⡣
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>࣬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӽ̳<EFBFBD>ͬһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ü<EFBFBD><EFBFBD>ӻ<EFBFBD><EFBFBD>ࣨPerson<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD>ݿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԡ<EFBFBD>
|
||||
|
||||
1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD>virtual inheritance<63>Ķ<EFBFBD><C4B6><EFBFBD>
|
||||
<EFBFBD>
|
||||
class derived_class : virtual [<5B><>] base_class
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>virtual base class
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳еĻ<EFBFBD><EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
|
||||
|
||||
2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳еĹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Ķ<EFBFBD><C4B6>ؼ̳еij<D0B5>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFB7A8><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>캯<EFBFBD><ECBAAF><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṩ<EFBFBD>Լ<EFBFBD><D4BC>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD>Ĺ<EFBFBD><C4B9>죨<EFBFBD><ECA3A8><EFBFBD>ڹ<EFBFBD><DAB9>캯<EFBFBD><ECBAAF><EFBFBD><EFBFBD>ʼ<EFBFBD>б<EFBFBD><D0B1>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>࣬<EFBFBD><E0A3AC><EFBFBD>۴<EFBFBD><DBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӻ<EFBFBD><D3BB>Ǽ<EFBFBD><C7BC>ӻ<EFBFBD><D3BB>ࣩ
|
||||
<20><><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD>Ĺ涨<C4B9><E6B6A8>
|
||||
<EFBFBD>ȵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD>캯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٵ<EFBFBD><EFBFBD>÷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD>캯<EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD>ͬһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>Щ<EFBFBD><D0A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><C4B9>캯<EFBFBD><ECBAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>˵<EFBFBD><CBB5><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷǻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>Ȼ<EFBFBD>ȵ<EFBFBD><C8B5>û<EFBFBD><C3BB><EFBFBD>캯<EFBFBD><ECBAAF>,<2C>ٵ<EFBFBD><D9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>캯<EFBFBD><ECBAAF>
|
||||
3<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD>캯<EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳з<EFBFBD>ʽ<EFBFBD>£<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD>캯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳з<EFBFBD>ʽ<EFBFBD>£<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD>캯<EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD>캯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ᳢<EFBFBD>Ե<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD>캯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȱʡ<EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>ȱʡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD>캯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ҵ<EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
33
practical_exercises/10_day_practice/day5/virtual/seq.cpp
Normal file
33
practical_exercises/10_day_practice/day5/virtual/seq.cpp
Normal file
@@ -0,0 +1,33 @@
|
||||
/* 虚基类调用次序(重要).cpp */
|
||||
//重要!!!
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
class A {
|
||||
int a;
|
||||
|
||||
public:
|
||||
A() { cout << "Constructing A" << endl; }
|
||||
};
|
||||
class B {
|
||||
public:
|
||||
B() { cout << "Constructing B" << endl; }
|
||||
};
|
||||
class B1 : virtual public B, virtual public A {
|
||||
public:
|
||||
B1(int i) { cout << "Constructing B1" << endl; }
|
||||
};
|
||||
class B2 : public A, virtual public B {
|
||||
public:
|
||||
B2(int j) { cout << "Constructing B2" << endl; }
|
||||
};
|
||||
class D : public B1, public B2 {
|
||||
public:
|
||||
D(int m, int n) : B1(m), B2(n) { cout << "Constructing D" << endl; }
|
||||
A a;
|
||||
};
|
||||
|
||||
int main() {
|
||||
D d(1, 2);
|
||||
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user