Skip to content

Commit 4267605

Browse files
author
XuhuaHuang
committed
Update example on multiple inheritance
1 parent c5d5935 commit 4267605

2 files changed

Lines changed: 86 additions & 1 deletion

File tree

MultipleInheritance/CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@ cmake_minimum_required(VERSION 3.20)
22

33
project("multiple_inheritance" LANGUAGES CXX)
44

5-
set(CMAKE_CXX_STANDARD 11)
5+
set(CMAKE_CXX_STANDARD 20)
66
set(CMAKE_CXX_STANDARD_REQUIRED ON)
77

8+
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
9+
810
add_executable(date_time "date_time.cpp")
911
add_executable(coloured_circle "coloured_circle.cpp")
12+
add_executable(modern_coloured_circle "modern_coloured_circle.cpp")
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
#include <iostream>
2+
#include <string>
3+
#include <string_view>
4+
5+
namespace constants {
6+
constexpr double pi = 3.14159265358979323846;
7+
}
8+
9+
class circle_t {
10+
private:
11+
int radius{0};
12+
13+
public:
14+
circle_t() = default;
15+
16+
explicit circle_t(int r)
17+
: radius(r) {}
18+
19+
void set_radius(int r) { radius = r; }
20+
21+
[[nodiscard]]
22+
int get_radius() const noexcept {
23+
return radius;
24+
}
25+
26+
[[nodiscard]]
27+
double get_area() const noexcept {
28+
return static_cast<double>(radius) * radius * constants::pi;
29+
}
30+
};
31+
32+
class colour_t {
33+
private:
34+
std::string line_colour{"none"};
35+
std::string fill_colour{"none"};
36+
37+
public:
38+
colour_t() = default;
39+
40+
explicit colour_t(std::string_view colour)
41+
: line_colour(colour)
42+
, fill_colour(colour) {}
43+
44+
void set_line_colour(std::string_view colour) { line_colour = colour; }
45+
46+
void set_fill_colour(std::string_view colour) { fill_colour = colour; }
47+
48+
[[nodiscard]]
49+
const std::string& get_line_colour() const noexcept {
50+
return line_colour;
51+
}
52+
53+
[[nodiscard]]
54+
const std::string& get_fill_colour() const noexcept {
55+
return fill_colour;
56+
}
57+
};
58+
59+
class coloured_circle_t : public circle_t, public colour_t {
60+
public:
61+
coloured_circle_t() = default;
62+
63+
coloured_circle_t(int radius, std::string_view colour)
64+
: circle_t(radius)
65+
, colour_t(colour) {}
66+
};
67+
68+
int main() {
69+
coloured_circle_t ccobj1;
70+
std::cout << "\nDefault constructor:\n"
71+
<< "Area: " << ccobj1.get_area() << "\n"
72+
<< "Line colour: " << ccobj1.get_line_colour() << "\n"
73+
<< "Fill colour: " << ccobj1.get_fill_colour() << "\n";
74+
75+
coloured_circle_t ccobj2(2, "red");
76+
std::cout << "\nOverloaded constructor:\n"
77+
<< "Area: " << ccobj2.get_area() << "\n"
78+
<< "Line colour: " << ccobj2.get_line_colour() << "\n"
79+
<< "Fill colour: " << ccobj2.get_fill_colour() << "\n";
80+
81+
return 0;
82+
}

0 commit comments

Comments
 (0)