[C++] 継承の基本知識とアクセス修飾子との関係についての深い理解
継承メソッドとアクセス修飾子の関係
3 つの継承メソッド:
パブリック継承
- プライベート継承
- #保護された継承 #関係: 基本クラスのメンバー関数がプライベートの場合、派生クラスの基本クラスのプライベート メンバーが非表示である場合、他の基準は最終的なアクセスのための小さな選択範囲に制限されます。
保護されたメンバー修飾子: 一部の基本クラス メンバーは、基本クラスのオブジェクトから直接アクセスされることを望まないが、派生クラスでアクセスする必要があるため、保護されたメンバーとして定義されます。保護されたメンバー修飾子は継承のために発生します。
非表示について理解する
非表示とは、派生クラスの関数が同じ名前の基本クラスの関数をブロックすることを意味します。規則は次のとおりです。
- 派生クラスの関数が基本クラスの関数と同じ名前で、パラメーターが異なる場合、この時点では、基本クラスは、virtual キーワードに関係なく非表示になります。
- 派生クラスの関数の名前が基本クラスの関数と同じで、パラメータも同じであるが、基本クラスの関数に virtual キーワードがない場合の場合、基本クラスの関数は非表示になります。
- 派生クラスのデフォルトのメンバー関数
6 つのデフォルトのメンバー関数が派生クラスで明示的に定義されていない場合、コンパイル システムはデフォルトでこれらの 6 つのメンバー関数を合成します。 。
- コンストラクター
- コンストラクターのコピー
- デストラクター
- アドレス演算子のオーバーロード
- const 変更アドレス演算子のオーバーロード
-
#include<iostream> using namespace std; class person{ public: person(const char* name) :_name(name) { cout<<"person()"<<endl; } person(const person& p){ cout<<"person(const person& p)"<<endl; } person& operator=(const person& p){ cout<<"person& operator=(const person& p)"<<endl; if(this!=&p){ _name=p._name; } return *this; } ~person(){ cout<<"~person()"<<endl; } protected: string _name; }; class student:public person{ public: student(const char* name,int num) :person(name) ,_num(num){ cout<<"student()"<<endl; } student(const student& s) :person(s) ,_num(s._num) { cout<<"student(const student& s)"<<endl; } student& operator=(const student& s){ cout<<"student& operator=(const student& p)"<<endl; if(this!=&s){ person::operator=(s);//必须指定域,否则会死循环 _num=s._num; } return *this; } ~student(){//析构的时候先清理子类,再清理父类,不需要显示的调用 cout<<"~student()"<<endl; } private: int _num; }; int main(){ student s1("jack",18); student s2(s1); student s3("rose",16); s1=s3; }
ログイン後にコピーダイヤモンドの継承
#ダイヤモンドの継承には、あいまいさとデータの冗長性の問題があります。
解決策: 仮想継承
関連記事:
C# 欠落アイテムに関するヒント (4) ):
Qianfeng C言語の基礎ビデオチュートリアル
以上が[C++] 継承の基本知識とアクセス修飾子との関係についての深い理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











.NET非同期プログラミング、LINQおよびEFCOREのコアコンセプトは次のとおりです。1。非同期プログラミングは、非同期を通じてアプリケーションの応答性を改善し、待ち望んでいます。 2。LINQは、統一された構文を介してデータクエリを簡素化します。 3.EFCOREは、ORMを介してデータベース操作を簡素化します。

Cでは、文字列でCharタイプが使用されます。1。単一の文字を保存します。 2。配列を使用して文字列を表し、ヌルターミネーターで終了します。 3。文字列操作関数を介して動作します。 4.キーボードから文字列を読み取りまたは出力します。

C言語では、以下などのエスケープシーケンスを通じて特殊文字が処理されます。\ nはラインブレークを表します。 \ tはタブ文字を意味します。 ESACEシーケンスまたは文字定数を使用して、Char C = '\ n'などの特殊文字を表します。バックスラッシュは2回逃げる必要があることに注意してください。さまざまなプラットフォームとコンパイラが異なるエスケープシーケンスを持っている場合があります。ドキュメントを参照してください。

C#.NETは、同時、並列、およびマルチスレッドプログラミングのための強力なツールを提供します。 1)スレッドクラスを使用してスレッドを作成および管理します。2)タスククラスは、スレッドプールを使用してリソース利用を改善するために、より高度な抽象化を提供します。

Char Arrayは文字シーケンスをC言語で保存し、char array_name [size]として宣言されます。アクセス要素はサブスクリプト演算子に渡され、要素は文字列のエンドポイントを表すnullターミネーター「\ 0」で終了します。 C言語は、strlen()、strcpy()、strcat()、strcmp()など、さまざまな文字列操作関数を提供します。

c言語のシンボルの使用方法は、算術、割り当て、条件、ロジック、ビット演算子などをカバーします。算術演算子は基本的な数学的操作に使用されます。割り当てと追加、下位、乗算、除算の割り当てには、条件操作に使用されます。ポインター、ファイル終了マーカー、および非数値値。

C言語では、charタイプの変換は、キャスト:キャスト文字を使用することにより、別のタイプに直接変換できます。自動タイプ変換:あるタイプのデータが別のタイプの値に対応できる場合、コンパイラは自動的に変換します。

Cスイッチステートメントでデフォルトに起因するエラーを回避するための戦略:定数の代わりに列挙を使用し、ケースステートメントの値を列挙の有効なメンバーに制限します。最後のケースステートメントでフォールスルーを使用して、プログラムが以下のコードを引き続き実行できるようにします。フォールスルーなしのスイッチステートメントの場合、エラー処理のためのデフォルトステートメントを常に追加するか、デフォルトの動作を提供します。
