Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
Light-City committed Dec 25, 2019
1 parent 8544284 commit 095ebc9
Show file tree
Hide file tree
Showing 8 changed files with 148 additions and 29 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ for(decl:col) {
- [容器1](./modern_C++_30/container1)
- [容器2](./modern_C++_30/container2)
- [异常](./modern_C++_30/exception)
- [字面量、静态断言和成员函数说明符](./modern_C++_30/literalAssert)
- [是不是应该返回对象?](./modern_C++_30/returnObj)

### 4.拓展部分
Expand Down
Binary file modified modern_C++_30/.CMakeLists.txt.un~
Binary file not shown.
5 changes: 5 additions & 0 deletions modern_C++_30/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,8 @@ add_executable(returnObj3 returnObj/returnObj3.cpp)
add_executable(returnObj4 returnObj/returnObj4.cpp)
add_executable(returnObj5 returnObj/returnObj5.cpp)
add_executable(rvonrvo returnObj/all.cpp)

add_executable(literal literalAssert/literal.cpp)
add_executable(assert literalAssert/assert.cpp)
add_executable(default_delete literalAssert/default_delete.cpp)
add_executable(overridefinal literalAssert/overridefinal.cpp)
29 changes: 0 additions & 29 deletions modern_C++_30/CMakeLists.txt~

This file was deleted.

13 changes: 13 additions & 0 deletions modern_C++_30/literalAssert/assert.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
//
// Created by light on 19-12-25.
//

#include <iostream>
#include <cassert>

int main() {
const int alignment=5;
assert((alignment & (alignment - 1)) == 0);
static_assert((alignment & (alignment - 1)) == 0, "Alignment must be power of two");
return 0;
}
18 changes: 18 additions & 0 deletions modern_C++_30/literalAssert/default_delete.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
//
// Created by light on 19-12-25.
//

class myFun {
public:
myFun() = default;

myFun(const myFun &) = default;

myFun &operator=(const myFun &) = default;

myFun(myFun &&) = delete;

myFun &operator=(myFun &&) = delete;

~myFun() = default;
};
81 changes: 81 additions & 0 deletions modern_C++_30/literalAssert/literal.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
//
// Created by light on 19-12-25.
//

#include <chrono>

#include <complex>
#include <iostream>
#include <string>
#include <thread>
#include <bitset>

using namespace std::literals::chrono_literals;
using namespace std::literals::string_literals;
using namespace std::literals::complex_literals;


struct length {
double value;
enum unit {
metre,
kilometre,
millimetre,
centimetre,
inch,
foot,
yard,
mile,
};
static constexpr double factors[] =
{1.0, 1000.0, 1e-3,
1e-2, 0.0254, 0.3048,
0.9144, 1609.344};

explicit length(double v,
unit u = metre) {
value = v * factors[u];
}


};

length operator+(length lhs,
length rhs) {
return length(lhs.value +
rhs.value);
}

length operator "" _m(long double v) { return length(v, length::metre); }

length operator "" _cm(long double v) { return length(v, length::centimetre); }

// 可能有其他运算符
int main() {

std::cout << "i * i = " << 1i * 1i << std::endl;
std::cout << "Waiting for 500ms" << std::endl;
std::this_thread::sleep_for(500ms);
std::cout << "Hello world"s.substr(0, 5) << std::endl;

length l1 = length(1.0, length::metre);
length l2 = length(1.0, length::centimetre);
std::cout << l2.value << std::endl;
std::cout << (l1 + l2).value << std::endl;

// 1.0_m + 10.0_cm
std::cout << (1.0_m + 1.0_cm).value << std::endl;

// 二进制字面量
unsigned mask = 0b1101;
// 以十进制打印
std::cout << mask << std::endl;

// 打印二进制字面量
std::cout << std::bitset<4>(mask) << std::endl;

// 数字分隔符
unsigned mk = 0b111'000'000;
double pi = 3.141'5926;
return 0;
}
30 changes: 30 additions & 0 deletions modern_C++_30/literalAssert/overridefinal.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
//
// Created by light on 19-12-25.
//


class A {
public:
virtual void foo();
virtual void bar();
void foobar();
};

class B : public A {
public:
void foo() override; // OK
void bar() override final; // OK
//void foobar() override;
// 非虚函数不能 override
};

class C final : public B {
public:
void foo() override; // OK
//void bar() override;
// final 函数不可 override
};

class D : public C {
// 错误:final 类不可派生
};

0 comments on commit 095ebc9

Please sign in to comment.