Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Keisuke Fukuda
PPTX, PDF
2,409 views
Effective modern C++ 勉強会 #3 Item 12
2015/03/25 Effective modern C++勉強会の発表資料です。
Software
◦
Read more
1
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 20
2
/ 20
3
/ 20
4
/ 20
5
/ 20
6
/ 20
7
/ 20
8
/ 20
9
/ 20
10
/ 20
11
/ 20
12
/ 20
13
/ 20
14
/ 20
15
/ 20
16
/ 20
17
/ 20
18
/ 20
19
/ 20
20
/ 20
More Related Content
PPTX
競技プログラミングのためのC++入門
by
natrium11321
PPTX
T69 c++cli ネイティブライブラリラッピング入門
by
伸男 伊藤
PDF
emc++ chapter32
by
Tatsuki SHIMIZU
PDF
Emcpp item31
by
mitsutaka_takeda
PDF
Effective Modern C++ 勉強会#1 Item3,4
by
Takashi Hoshino
PDF
templateとautoの型推論
by
MITSUNARI Shigeo
PDF
Emcjp item21
by
MITSUNARI Shigeo
PDF
Emcjp item33,34
by
MITSUNARI Shigeo
競技プログラミングのためのC++入門
by
natrium11321
T69 c++cli ネイティブライブラリラッピング入門
by
伸男 伊藤
emc++ chapter32
by
Tatsuki SHIMIZU
Emcpp item31
by
mitsutaka_takeda
Effective Modern C++ 勉強会#1 Item3,4
by
Takashi Hoshino
templateとautoの型推論
by
MITSUNARI Shigeo
Emcjp item21
by
MITSUNARI Shigeo
Emcjp item33,34
by
MITSUNARI Shigeo
What's hot
PPTX
Visual C++で使えるC++11
by
nekko1119
PDF
クロージャデザインパターン
by
Moriharu Ohzu
PPTX
Map
by
kikairoya
PDF
Replace Output Iterator and Extend Range JP
by
Akira Takahashi
PDF
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
by
Shintarou Okada
PPTX
C++ tips4 cv修飾編
by
道化師 堂華
PDF
ゲーム開発者のための C++11/C++14
by
Ryo Suzuki
PDF
More C++11
by
京大 マイコンクラブ
PDF
組み込みでこそC++を使う10の理由
by
kikairoya
PDF
C++ ポインタ ブートキャンプ
by
Kohsuke Yuasa
PDF
C++14 Overview
by
Akira Takahashi
PDF
unique_ptrにポインタ以外のものを持たせるとき
by
Shintarou Okada
PDF
すごいConstたのしく使おう!
by
Akihiro Nishimura
PDF
競技プログラミングにおけるコードの書き方とその利便性
by
Hibiki Yamashiro
PDF
Effective Modern C++ 読書会 Item 35
by
Keisuke Fukuda
PDF
C++0x 言語の未来を語る
by
Akira Takahashi
PDF
What is template
by
Akira Takahashi
PDF
Emcpp item41
by
mitsutaka_takeda
PDF
C++ Template Meta Programming の紹介@社内勉強会
by
Akihiko Matuura
PDF
C++入門?
by
tsudaa
Visual C++で使えるC++11
by
nekko1119
クロージャデザインパターン
by
Moriharu Ohzu
Map
by
kikairoya
Replace Output Iterator and Extend Range JP
by
Akira Takahashi
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
by
Shintarou Okada
C++ tips4 cv修飾編
by
道化師 堂華
ゲーム開発者のための C++11/C++14
by
Ryo Suzuki
More C++11
by
京大 マイコンクラブ
組み込みでこそC++を使う10の理由
by
kikairoya
C++ ポインタ ブートキャンプ
by
Kohsuke Yuasa
C++14 Overview
by
Akira Takahashi
unique_ptrにポインタ以外のものを持たせるとき
by
Shintarou Okada
すごいConstたのしく使おう!
by
Akihiro Nishimura
競技プログラミングにおけるコードの書き方とその利便性
by
Hibiki Yamashiro
Effective Modern C++ 読書会 Item 35
by
Keisuke Fukuda
C++0x 言語の未来を語る
by
Akira Takahashi
What is template
by
Akira Takahashi
Emcpp item41
by
mitsutaka_takeda
C++ Template Meta Programming の紹介@社内勉強会
by
Akihiko Matuura
C++入門?
by
tsudaa
Viewers also liked
PPTX
Emcpp0506
by
Takatoshi Kondo
PPTX
Effective Modern C++ 勉強会 Item 22
by
Keisuke Fukuda
PPTX
Effective Modern C++ study group Item39
by
Takatoshi Kondo
PDF
Effective Modern C++ 勉強会#6 Item25
by
Takashi Hoshino
PDF
Effective modern-c++#9
by
Tatsuki SHIMIZU
PDF
Effective Modern C++ 勉強会#7 Item 27
by
Mitsuru Kariya
PPTX
Effective Modern C++勉強会#4 Item 17, 18資料
by
Ryo Igarashi
PDF
Effective Modern C++ Item 24: Distinguish universal references from rvalue re...
by
mooopan
PDF
Effective Modern C++ 勉強会#3 Item 15
by
Mitsuru Kariya
PPTX
Effective modern c++ 8
by
uchan_nos
PPTX
Effective modern c++ 5
by
uchan_nos
PDF
Effective Modern C++ 勉強会 Item26
by
Akihiro Nishimura
PDF
effective modern c++ chapeter36
by
Tatsuki SHIMIZU
PDF
Effective Modern C++ 勉強会#8 Item38
by
Takashi Hoshino
PDF
Effective Modern C++ 勉強会#3 Item16
by
Mitsuru Kariya
PPTX
Effective Modern C++勉強会#2 Item 11(,12)
by
Keisuke Fukuda
PDF
emcjp Item 42
by
MITSUNARI Shigeo
Emcpp0506
by
Takatoshi Kondo
Effective Modern C++ 勉強会 Item 22
by
Keisuke Fukuda
Effective Modern C++ study group Item39
by
Takatoshi Kondo
Effective Modern C++ 勉強会#6 Item25
by
Takashi Hoshino
Effective modern-c++#9
by
Tatsuki SHIMIZU
Effective Modern C++ 勉強会#7 Item 27
by
Mitsuru Kariya
Effective Modern C++勉強会#4 Item 17, 18資料
by
Ryo Igarashi
Effective Modern C++ Item 24: Distinguish universal references from rvalue re...
by
mooopan
Effective Modern C++ 勉強会#3 Item 15
by
Mitsuru Kariya
Effective modern c++ 8
by
uchan_nos
Effective modern c++ 5
by
uchan_nos
Effective Modern C++ 勉強会 Item26
by
Akihiro Nishimura
effective modern c++ chapeter36
by
Tatsuki SHIMIZU
Effective Modern C++ 勉強会#8 Item38
by
Takashi Hoshino
Effective Modern C++ 勉強会#3 Item16
by
Mitsuru Kariya
Effective Modern C++勉強会#2 Item 11(,12)
by
Keisuke Fukuda
emcjp Item 42
by
MITSUNARI Shigeo
Similar to Effective modern C++ 勉強会 #3 Item 12
PDF
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„
by
和弘 井之上
PDF
わんくま同盟大阪勉強会#61
by
TATSUYA HAYAMIZU
PPTX
Lambda in template_final
by
Cryolite
PDF
中3女子でもわかる constexpr
by
Genya Murakami
PDF
C++コミュニティーの中心でC++をDISる
by
Hideyuki Tanaka
PPTX
C2C++11Level1
by
Yuki Miyatake
PPTX
最新C++事情 C++14-C++20 (2018年10月)
by
Akihiko Matuura
PPTX
Effective Modern C++ Item 9 and 10
by
uchan_nos
PDF
C++ lecture-2
by
sunaemon
PDF
研究生のためのC++ no.2
by
Tomohiro Namba
PDF
C++コンパイラ GCCとClangからのメッセージをお読みください
by
digitalghost
PDF
C++ lecture-0
by
sunaemon
PDF
研究生のためのC++ no.4
by
Tomohiro Namba
PDF
C++0x concept
by
Akira Takahashi
PDF
Tr18015
by
kikairoya
PPTX
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
by
Shin-ya Koga
PPTX
C++の復習
by
Toshihiko Ando
PPT
C++でぼくが忘れがちなこと
by
Toshihiko Ando
PDF
最近のC++ @ Sapporo.cpp #5
by
Kohsuke Yuasa
PPTX
おそらく明日から役にたつC++11新機能
by
Kenta IDA
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第4回 ‟関数„
by
和弘 井之上
わんくま同盟大阪勉強会#61
by
TATSUYA HAYAMIZU
Lambda in template_final
by
Cryolite
中3女子でもわかる constexpr
by
Genya Murakami
C++コミュニティーの中心でC++をDISる
by
Hideyuki Tanaka
C2C++11Level1
by
Yuki Miyatake
最新C++事情 C++14-C++20 (2018年10月)
by
Akihiko Matuura
Effective Modern C++ Item 9 and 10
by
uchan_nos
C++ lecture-2
by
sunaemon
研究生のためのC++ no.2
by
Tomohiro Namba
C++コンパイラ GCCとClangからのメッセージをお読みください
by
digitalghost
C++ lecture-0
by
sunaemon
研究生のためのC++ no.4
by
Tomohiro Namba
C++0x concept
by
Akira Takahashi
Tr18015
by
kikairoya
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
by
Shin-ya Koga
C++の復習
by
Toshihiko Ando
C++でぼくが忘れがちなこと
by
Toshihiko Ando
最近のC++ @ Sapporo.cpp #5
by
Kohsuke Yuasa
おそらく明日から役にたつC++11新機能
by
Kenta IDA
Effective modern C++ 勉強会 #3 Item 12
1.
Effective Modern C++ Item
12 Effective Modern C++ 勉強会#3 2015/03/25 福田圭祐 @keisukefukuda
2.
Item 12: Declare overriding
functions override
3.
概要 基底クラスの関数をoverrideしたいときは、新たに追加 されたoverrideキーワードを使おう (おまけ) メンバ関数のreference qualifierについて
4.
reference qualifierについて 先に説明 メンバ関数宣言にreference qualifierがついていると、 *thisが右辺値か左辺値かによって呼び分けられる関数を 作ることができる class
Widget { public: void f() &; void f() &&; }; Widget().f(); // f()&& Widget w; w.f(); // f() &
5.
reference qualifierの例 class Widget
{ public: using DataType = std::vector<double>; DataType &data() { return values; } private: DataType values; }; ... // Widgetを作る関数 Widget makeWidget(); // ふつう Widget w; auto vals1 = w.data(); // Widgetオブジェクトは右辺値なので // vectorのコピーが無駄 auto vals2 = makeWidget().data();
6.
reference qualifierの例 class Widget
{ public: using DataType = std::vector<double>; DataType &data() & { return values; } DataType data() && { return std::move(values); } private: DataType values; }; // lvalue overloadが呼ばれる Widget w; auto vals1 = w.data(); // rvalue overloadが呼ばれる auto vals2 = makeWidget().data();
7.
virtual関数のoverride virtual関数のoverrideが起こる条件 (C++98 & C++11共通) •
基底クラスの関数がvirtual • 基底クラスと派生クラスで関数名が同一 • 仮引数の型も同一 • const qualifierも同一 • 戻り値の型と例外指定がcompatible
8.
戻り値の型がcompatibleとは 基底クラスと派生クラスの関数 TB B::f() TD D::f() があるとき、以下の条件が満たされれば、両者の戻り値の 型はcovariantである •
TB,TDが両方ともポインタor参照型である • TBが、TDの直接or間接の基底クラスである • cv-qualifierが同一 or TBの方が厳しい
9.
例外指定がcompatibleとは 基底クラスと派生クラスの関数 TB B::f() throws(…) TD
D::f() throws(…) があるとき、 { B::f()が投げる例外 } ⊃ {D::f()が投げる例外 } なら、例外指定はcompatible ※ただし例外指定はオワコン
10.
virtual関数のoverride virtual関数のoverrideが起こる条件 (C++98 & C++11共通) •
基底クラスの関数がvirtual • 基底クラスと派生クラスで関数名が同一 • 仮引数の型も同一 • const qualifierも同一 • 戻り値の型と例外指定がcompatible (C++11から) • reference qualifierが同一
11.
間違いの例 class Base { public: virtual
void mf1() const; virtual void mf2(int x); virtual void mf3() &; void mf4() const; }; class Drived : public Base { public: virtual void mf1(); virtual void mf2(unsigned int x); virtual void mf3() &&; void mf4() const; };
12.
間違いの例 class Base { public: virtual
void mf1() const; virtual void mf2(int x); virtual void mf3() &; void mf4() const; }; class Drived : public Base { public: virtual void mf1(); virtual void mf2(unsigned int x); virtual void mf3() &&; void mf4() const; }; const qualifierが違う
13.
間違いの例 class Base { public: virtual
void mf1() const; virtual void mf2(int x); virtual void mf3() &; void mf4() const; }; class Drived : public Base { public: virtual void mf1(); virtual void mf2(unsigned int x); virtual void mf3() &&; void mf4() const; }; const qualifierが違う 仮引数の型が違う
14.
間違いの例 class Base { public: virtual
void mf1() const; virtual void mf2(int x); virtual void mf3() &; void mf4() const; }; class Drived : public Base { public: virtual void mf1(); virtual void mf2(unsigned int x); virtual void mf3() &&; void mf4() const; }; const qualifierが違う 仮引数の型が違う reference qualifierが違う
15.
間違いの例 class Base { public: virtual
void mf1() const; virtual void mf2(int x); virtual void mf3() &; void mf4() const; }; class Drived : public Base { public: virtual void mf1(); virtual void mf2(unsigned int x); virtual void mf3() &&; void mf4() const; }; const qualifierが違う 仮引数の型が違う reference qualifierが違う 基底クラスでvirtual宣言を忘れている
16.
virtual関数のoverrideは間違いやすい でもコンパイラが警告出すでしょ? → 出さないコンパイラもある mf1 mf2
mf3 mf4 g++ 4.8.2 warning※ warning※ warning※ g++ 4.9.2 warning※ warning※ warning※ clang++ 3.5 warning warning warning ※-Wall, -Wextra, -Weffc++(4.9.2)ではダメで、陽に-Woverloaded-virtualを指定 やってみた ※g++は、-Wsuggest-override というのも有るらしいが、4.9.2では認識されなかった
17.
virtual関数のoverrideは間違いやすい 重要だが間違いやすいので、C++11ではoverrideキーワー ドが追加された class Base { public: virtual
void mf1() const; virtual void mf2(int x); virtual void mf3() &; void mf4() const; }; class Drived : public Base { public: virtual void mf1() override; virtual void mf2(unsigned int x) override; virtual void mf3() && override; void mf4() const override; }; error: 'virtual void Drived::mf1()' marked override, but does not override virtual void mf1() override; ^ ちゃんとエラーになる
18.
virtual関数のoverrideは間違いやすい 重要だが間違いやすいので、C++11ではoverrideキーワー ドが追加された // overrideを使った正しいコード class Base
{ public: virtual void mf1() const; virtual void mf2(int x); virtual void mf3() &; virtual void mf4() const; }; class Drived : public Base { public: virtual void mf1() override; virtual void mf2(unsigned int x) override; virtual void mf3() && override; void mf4() const override; };
19.
overrideを使うメリット overrideキーワードを使うことのメリット: • 間違いが減る • 基底クラスのvirtual関数のシグネチャを変更する際に、影響範囲 の見積もりが楽 override,
final は contextual keyword =関数シグネチャの末尾以外では予約語ではない class Widget { public: void override(); // →OK };
20.
Things to remember •
overrideキーワードを使おう • reference qualifiersを使うと、*thisが左辺値と右 辺値の時の挙動を変えることができる
Editor's Notes
#7
----- 会議メモ (3/25/15 19:24) ----- 来てクラスでの&の有無
Download