C ++の基礎

Infopulse University Ukraine

プログラムの説明

公式の説明を読む

C ++の基礎

Infopulse University Ukraine

コース概要

基本的な概念:

  • コンピュータ、コンピュータのコマンド、アプリケーション、およびプログラミング言語は何ですか?これらの概念の進化。
  • コンピュータプログラムの実行の詳細な分析:オペレーティングシステム、ドライバ、CPU、メモリ、バス、キーボード、マウス、および他の成分の役割を説明します
  • 高及び低水準言語(機械コード、アセンブラ、C、C ++、Java(登録商標)、SQL、HTML)の間の差。
  • どのようにプログラムを書くために開始します。テキストエディタ、コンパイラ、リンカ。
  • IDE(統合開発環境)。

入門:

  • 前のプログラム・コード・ライン・バイ・ラインの説明。
  • プリプロセッサ - プログラムのエントリポイント。
  • 第1の符号化規則をご紹介します。エラーは、どのようにそれらに対処します。
  • データの種類(サイズ、範囲)、変数の宣言。命名規則、コードの読みやすさと優れたコーディングスタイル。
  • スタック(LIFOキュー)。変数の可視性と寿命。グローバルとローカル変数。悪いコーディングスタイル - グローバル変数を使用して。可視性の拡張演算子「::」。
  • 変数と定数、初期化と代入の違い。
  • バイナリ、10進数と16進数の形式。

練習:

  • "こんにちは世界!"プログラム。
  • ユーザーの入力からデータを受信し、それを表示する方法。ユーザダイアログ。

最初のツール:

  • オペレータ、表現および命令の概念。成功する面接通過のための正しい用語の使用の重要性。
  • 算術演算子、比較演算子とその使い方のルール。 符号付きと符号なしの型。 明示的および暗黙的な型キャスト。 後およびプリインクリメント。 優先順位と結合規則。 条件演算子(それ以外の場合、場合)、三項演算子、スイッチ(コンセプトを通って落下)。
  • ループ:ながら、しばらく操作を行い、ために。ネストされたループ(I、J、Kカウンタはご注文します)。
  • デバッグ:プログラムの実行、ブレークポイント、F5、F10をトレースする方法、時計。

練習:

  • インタビューからいくつかの質問。
  • シンプルな電卓。任意のユーザー入力を処理する能力を調べます。
  • 可能なエラーの数を低減する方法。クロスプラットフォームアプリケーションの最初のデザインコンセプト。
  • 図形描画:満たされ、空の、定義された境界線の太さ、長方形、三角形、菱形と。
  • どのように長方形の中央にテキストを表示します。画面上の位置
  • 行のいくつかの形状。
  • 単純なアニメーション(動画形状)、getchは()は、最初のツールは、必要な情報を取得します。
  • 検索と範囲内の特定の番号を処理します。
  • 「図面」の最初のプログラム、永遠の仕事ができます。それは、メニューを表示し、ユーザーの選択によって、任意の形状を描画するか、終了する必要があります。

配列、ポインタ、参照、アルゴリズム:

  • ベースの配列、そのサイズ、インデックス、はsizeof()演算子、配列の初期化をスタック。
  • ポインタは、iArray [i]が式が実際に動作んどのように、何がコンパイラのポインタ型を意味します。 動的なメモリ割り当て、ヒープ、新しい、削除、[]演算子を削除します。 初期化されていないポインタ、絞首刑(忘れて)ポインタ、メモリリーク(およびそれを検出するツール):すべてのポインタニュアンス関連。 すべてのものへのポインタ - void *型。
  • 参考文献、それらとポインタ間の違い。
  • ソート、検索や比較アルゴリズム、彼らのパフォーマンス。プロファイラ。コンパイルと実行時エラー。
  • 動的な配列(つまり、実行時にサイズを変更することができます)。多次元配列。 -

練習:

  • アルゴリズム:検索、最小値、最大値、アイテムをカウント、合計、平均を検索します。
  • より複雑なアルゴリズムは:多次元配列、ヒストグラム作成、マトリックスの回転と連動します。配列内の現在の位置から先読みする方法。
  • 彼らのパフォーマンスの分析といくつかのソートアルゴリズム。
  • 最初のゲーム:チックタックつま先。 説明:ユーザーが「0'-Sまたは 'X' sのを選択して再生するためにどのくらいのラウンドに設定するオプションが表示されます。 プログラムは、現在のラウンドの勝者を決定し、総勝利数、描画し、敗北を維持する必要があります。
  • また、上記プログラムは、(それらの説明を)利用者のエラーから保護されなければならない、優れた操作性とインターフェイスを持っています。高度:テキスト出力の色を使用します。

機能:

  • なぜ我々は、機能に必要なのですか?
  • アドレスによって参照することにより、値によって関数の引数を渡します。
  • 最初のアプリケーションのアドレス空間、および実行可能ファイル形式、関数呼び出しのコストを見てください。
  • オーバーロード機能、デフォルトパラメータ。
  • 再帰呼び出しスタック、スタックオーバーフロー、整数オーバーフロー。
  • ポインタとのconst修飾子:定数への定数ポインタとポインタの違い。
  • 良いコーディングスタイル。なぜそれがとても重要です。

練習:

  • アルゴリズムの性能測定。妥当な精度を取得する方法。
  • インタビュー(再帰の使用量)から一部のタスク。
  • Tick​​_tackつま先、電卓と関数を使用して描画アプリケーションを書き換えます。

文字列:

  • コンソールアプリケーション、システムバッファとキーボード割り込み。
  • ライブラリ関数:関数strcmp、strlen関数、strtok_s、はstrstr。
  • 、cin.getline(CおよびC ++で)テキスト出力をフォーマットする方法。
  • char型とwchar_tの、ゼロ終端文字列。文字列の動的配列。

練習:

  • ユーザーの間違った入力からアプリを保護するための補助機能を作成します。
  • 数字の代わりに文字を入力防ぎます。
  • バッファ容量よりも多くの記号を入力防ぎます。
  • 特大テキスト入力のための準備ができて
  • 文章内に存在するどのように多くの時間与えられた単語?
  • ユーザーが文章の任意の番号を入力すると、アプリケーションがそれらを解析し、それらの文章から単語の配列を作成し、数otの単語をカウントし、アルファベット順長さによって単語をソートし、最長と最短見つけました。
  • コンテンツのサイクルを中断し、更新するオプションで「スクロールテキスト文字列 "アプリを作成します。
  • 高度:ワードラップアルゴリズムを実装します。

ビット単位演算:

  • 演算子&、|、^、〜、<<、>>!。 -

練習:

  • 異なる範囲(0-5、0から100まで、10から60、100〜40000)から1つの整数の変数の4つの数字で保管してください。
  • 整数値のバイナリ表現を表示
  • 何が最大の数は、1バイトに格納することができますか?
  • 200のパワーに2を上げます。
  • PCのすべての論理ドライブの一覧を表示します。
  • 入力したテキストの暗号化と復号化。

構造体、列挙型、共用体、ビットフィールド:

  • ユーザー定義型はどのようなものです。 СとС++との違い。オブジェクト指向プログラミングとの最初の知人。
  • すべてのデータ型のユニバーサルストレージ。
  • 関連定数のコンパクトな宣言として列挙。

練習:

  • データを任意の型を送受信するために労働組合を使用する方法。
  • 個人データを格納し、処理するためのアプリ「学生」を開発。 名、姓、年齢、5マーク(配列)、平均マーク:「学生」構造(データストア)は、次のフィールドを持っている必要があります。 オブジェクトの配列を使用して簡単な操作を実装:検索、並べ替え、追加、削除、編集を。 (名前を含む)構造体の配列の自動初期化のアルゴリズムを作成します。 あなたは、キーボードからの配列のサイズを入力します。 高度なタスク:ソートとショーのデータがないオブジェクト自体、構造体へのポインタを使用して。

プリプロセッサディレクティブ:

  • 方法と場所は、定数を重要な制限を定義する必要があります。
  • ファイルを含むから数回を防ぐ、同じまたは異なる場所からコンパイル単位を含む方法。
  • メモリクラスます。extern、静的、登録、自動。
  • 関数およびファイルのstatic変数。
  • 条件付きコンパイル。クロスプラットフォーム開発。
  • デバッグに#と##の演算子を使用しました。
  • マクロ:、マクロプロとコントラ、どのように書くのに便利なユニットテストを書く方法について説明します。

練習:

  • いくつかの* .hファイルと*の.cppファイルを作成し、それらを正しくリンクします。
  • すべての文の性能評価のためのマクロを書きます。

ファイル:

  • オペレーティング・システムの役割、IO操作でドライバやアプリケーション、ファイル操作モードを占め参照。
  • ファイル関連のエラーはどのような種類の本番アプリケーションでチェックする必要があります。
  • 読み取り、書き込み、位置決め動作。ファイルサイズやフォーマット。バッファされた出力。
  • テキストとバイナリファイルオープンモードの違い。どちらが使用されるべきです。

練習:

  • ドライブのコンテンツやディレクトリを探索する方法。
  • 大きなファイルをコピーする方法。
  • 任意の形式の暗号化されたデータをファイルに書き込みます。それを読んで、復号化して示しています。
  • リマインダー(日記、主催者)のようなアプリを作成します。 説明:ユーザーがいくつかの情報を入力し、それについて思い出させるために時間を設定します。 ユーザーはこのアプリを起動したら、それは、現在の日付と時刻をチェックし、ファイルに保存されているすべてのレコードを検索します。 この時点で思い出させるために何かがある場合は、リマインダメッセージが表示されます。

コー​​スプロジェクト:

  • 検索し、(ファイル形式を認識せず、であるように)すべてのファイルの内容を表示し、特定のファイルを編集することができ、単純なファイルマネージャ。 生徒は、データストレージおよび処理のために彼自身のファイル形式を開発すべきである - 構造「学生」の大きさの配列を(構造の練習セクションで、上記の説明を参照します)。
  • 高度な複雑さ:「学生」の構造(ヒープ内の文字の配列)とその長さのフィールドの経験」を追加します。すべての学生が経験を持っていない、それはファイル形式を複雑にする必要があります。
  • プログラムは、ユーザーフレンドリーなインターフェイスを持っており、2つのモードで動作する必要があります。
  • ファイルを作成し、ファイルシステムでそれを見つけます。
  • オープン、ユーザによって指定されたそれらの様々な基準に基づいて、データを並べ替え、それを編集し、レコードを読み取り、追加または削除。
  • いずれのモードで作業して、ユーザーがコンテキストメニューを見ることができるはずです。アプリは、任意のユーザー・エラーから保護し、メモリリーク(ヒープメモリ、記述子)のいずれかの種類を持っていなければなりません。

C ++の高度な

コース期間: 120時間 関数ポインタ:

  • 検索またはアルゴリズムをソートするために、引数として渡すことができ、検索、比較基準として関数ポインタの使用法。述語。
  • 例えば、既存のインタフェースにあなたの機能を適応:qsort_s機能を使用して、任意の配列をソートします。コー​​ルバック関数、typedefを。
  • それを再コンパイルせず、プログラムの機能を拡張する方法。余分なQA作業のコスト。

練習:

  • ソート「学生の実行時に受信したいくつかの基準によって(基本コースの練習を参照してください)​​。
  • 関数ポインタの配列を使用して「電卓」アプリを書き換えます。

テンプレート機能:

  • 型推論、型キャストや関数の引数、テンプレート関数のオーバーロード。
  • 非型パラメータ。

練習:

  • int型、charの配列をソートし、テンプレート関数を使用して倍増アプリを開発します。
変数と関数のパラメータの(未定義の)数:
  • 最初のパラメータの役割、書式指定子、va_listの。
練習:
  • 「ミニのprintf」機能を開発します。

クラス(基本概念):

  • クラス設計と使用法の哲学。
  • 彼と一緒に仕事をする一連のルールとしてコンストラクタ、デストラクタ、オーバーロードコンストラクタ、クラスインターフェイス...
  • プログラムでクラス関数に対するすべての呼び出しをトレースする方法。
  • デフォルトのクラスの関数の機能とどのようにそれを無効にします。
  • 組成:集約と知り合い、相互作用図、UML。
  • 初期設定のルール。リソースを操作する方法。民間この、公共、。
  • プリプロセッサ#ifndef命令とコンパイラに依存#pragma指令。 C ++標準ではどのようなものです。クラスAは、Bクラスのオブジェクトを持っていますが、クラスBはへのポインタを持っている - これを解決する方法について説明します。 フレンズ:どのように関数やクラスが別のクラスに友達になることができます。 「友人」の関係。

練習:

  • アレイとラインクラスを開発。
  • 別のツール:安全に任意のファイルを書き換えるために、任意のクライアントによって使用され、かつ安全にデータ(クライアントとファイルとの間のプロキシ)を取得することができますクラスのバックアップ;

コピーコンストラクタと演算子オーバーロード:

  • するときは、これらのツールが必要なのでしょうか?浅いコピーおよび深いコピー。
  • 内部に別のオブジェクトを持つオブジェクトをコピーする方法。
  • 明示的なコンストラクタ。
  • ビルトインとユーザ定義データ型。ルールを演算子オーバーロード。

練習:

  • +のオーバーロード、=、<<、(型キャスト)、*(間接)、新しい、++、 <, == and [] operators.

リンクリスト、テンプレートクラス、STLへの導入:

  • どのようにリンクされたリストの作品。リストと配列の違い、その性能の比較。
  • CPUのキャッシュレベル、キャッシュヒットとキャッシュミスはどのようなものです。なぜリンクされたリストは、良いではなく悪いです。
  • STLの概要:コンテナ、イテレータ。
  • テンプレートクラス:* .HPPファイル、他のクラスのオブジェクトに基づいてコンストラクタ。
  • テンプレートで演算子オーバーロードを使用しました。テンプレートの特殊化。

練習:

  • STLのようなListクラスを開発します。

使用上のクラスで「定数 '修飾子:

  • 可変const_castを、「実定数 'と読み取り専用フィールドとの間の差。
  • constメンバ関数。

練習:

  • constのメンバーを持つクラスを開発すること。

静的クラスメンバー:

  • プライベートコンストラクタ、どのクラスのすべてのオブジェクトをカウントします。パターンとは何ですか? Singletonパターン。どのようにアンチパターンであることがないように設計されるべきです。
  • 静的メンバ関数。
  • >演算子 - スマートポインタの過負荷の紹介。
  • クラスメンバへのポインタ。

練習:

  • クラスのすべてのオブジェクトの数をカウントします。
  • シンプルなSmartPtrクラスを開発します。

継承とポリモーフィズム:

  • 保護されたクラスメンバー、privateとprotected継承。
  • 子オブジェクトの初期化。
  • 基底クラスへのポインタから作業してください。新しいUMLシンボル。
  • 仮想関数、デストラクタ、抽象基本クラス、インタフェース、vptr、VTBL
  • 静的および動的バインディング、static_castを、dynamic_castを、typeidを、RTTI。
  • 機能の継承(およびデータ)とインターフェースの継承の違い。
  • ときに仮想デストラクタが悪いソリューションです。 ABI - アプリケーションバイナリインタフェース。

練習:

  • クラス階層を作成し、クラスから、物体からのメンバーの可視性を確認してください。
  • パターン:橋、抽象工場、アダプタ、ビジター、デコレーター。
  • インタビューからいくつかの質問。

動的なデータ構造。 STL、BOOST:

  • STLコンテナ:ベクトル、リスト、セット、マップ、両端キュー、スタック、unordered_set。彼らと仕事のニュアンス。 std :: shared_ptrの、make_shared()、のstd :: unique_ptrを。
  • ように、検索、コピー、find_if、削除、equal_to、bind2ndと:アルゴリズム、ファンクタ、関数アダプタ。
  • 名前空間。ランダウの記号。
  • BOOST:どのようにそのライブラリをコンパイルし、プロジェクトに含めるします。 shared_ptr、weak_ptrを、というように、バインドをmake_shared、と。

練習:

  • すべての主要なコンテナとアルゴリズムで動作します。

例外処理:

  • 例外処理とプログラムのアーキテクチャ。
  • 再スロー例外、キャッチ(...)、スタック巻き戻しシーケンスとルール。 throwed例外オブジェクトの寿命。 dynamic_castを<>.

練習:

  • パターン「責任の連鎖」。
  • 卒業プロジェクト「オンラインストア」の部分の説明(スレッド、ライブラリ、およびネットワーキングなし)。

C ++ 11:

  • ラムダ、自動車、右辺値、可動コンストラクタと代入演算子。 std ::移動()、decltype、均一な初期化子リスト、nullptr。

練習:

  • ムーブコンストラクタの性能は、コピーコンストラクタが行うよりも良くなる条件を確認してください。

多重継承:

  • アダプタパターンの別の実装。
  • 仮想継承、コンパイラとの相違点。オブジェクトの一部。
  • なぜC#とJavaは唯一のインターフェイスから複数の継承を可能にします。
  • COM技術の基礎:IUnknownの、QueryInterfaceを、コンポーネントの登録、GetClassObject、します。regsvr32、CLSID。

練習:

  • void *型から型キャストの落とし穴を確認してください。

動的および静的ライブラリ:

  • ライブラリから関数やクラスをエクスポートする方法。プロジェクトに含める方法。
  • 明示的および暗黙的なリンク、デバッグ。
  • クロスプラットフォームアプリケーションの設計。

練習:

  • あなたの「オンラインストア」プロジェクト内のライブラリを使用してください。
  • バージョン管理システムの概念。 Gitリポジトリ。

Win32 APIを使用してGUIアプリケーション。 QtのGUI:

  • コンソールアプリケーションとウィンドウのアプリの違いは何ですか。無限ループ、メッセージ、ウィンドウプロシージャ、SendMessage関数とのPostMessage関数間の違い?リソースファイル*の.RC。
  • どのようにカスタムウィンドウを作成して、カスタムメッセージを定義します。
  • コントロールを操作する方法:ボタン、(Qtのを含む)等COMBOBOX、EDITを、(ラジオは、グループボックス、チェックしてください)​​。
  • InitCommonControls関数機能。
  • Qtの中のイベントとスロット。ウィンドウをサブクラス化する方法ウィンドウにビューポートをずらし、(含のQt)(ウィンドウプロシージャを置き換えます)。ユーザーコントロールの作成、OwnerDrawするスタイル。
  • 互換性HDC。

練習:

  • 単純な形状を描画し、ベクトルグラフィックの原則を使用して、画像として保存し「VectorDraw」アプリ、の3つのバージョン(それぞれが前のバージョンを拡張する)を作成します。 下位互換性を達成するために(多型を使用して)ファイル形式とプログラムのアーキテクチャを開発します。

プロセスとスレッド:

  • ユーザーとOSのアドレス空間。カーネルのオブジェクト。
  • するときは、スレッドを使用する必要があり、そのうちの何番目はあなたのプログラムをスピードアップすることができます。スレッドのコンテキスト。
  • スレッド、揮発性およびコンパイラの最適化。
  • Win32 APIを使用して、スレッド(およびプロセス)の同期。 ミューテックス、イベント、セマフォ、待機可能タイマー。 WaitForSingleObjectsなど。 原子Interlocked-機能の家族。 どのような順序でミューテックスのロックを解除する必要がありますか?
  • TLS(スレッドローカルストレージ)。再入およびスレッドセーフコード。
  • プロセス:優先順位、プリエンプティブマルチタスク、子プロセスがハンドルを継承する方法について説明します。
  • IPC(プロセス間通信)、メモリマッピング、パイプは、ライブラリ内のセクションを共有しました。
  • プロセス、スレッド、ライブラリの仮想メモリ、スナップショットのための関数。
  • C ++ 11とブーストを使用して、スレッドの同期。 std ::スレッド、ミューテックス、lock_guad、condition_variable、unique_lockの(ブースト::スレッドとの差)は、ブースト::クロノ。

練習:

  • アプリケーションの説明:コンソールアプリケーションは、いくつかの作業をスピードアップしたいと考えています。 あなたが作成し、「メイン」とint配列で初期化し、CPUのカーネルの数に応じて部品にそれを分割する必要があります。 スレッドの数が同じで起動し、それらをデータのその部分を与えます。 一方、「主」はそのジョブを実行し、スレッドを待ち続けます。 「メイン」内のデータを表示します。
  • 次のキューを同期する方法:一方の入力スレッドが3ワーカースレッドへのデータ構造の順序付けられたシーケンスを送信します。 彼らは同じ仕事をするが、処理する時間、任意のオブジェクトは異なる場合があります。 ワーカースレッドは、オブジェクトを処理し、前の順序でデータ系列を再構築するために、1つの出力スレッドにそれらを与えます。 GUIスレッドがデータを示しています。
  • どのようにカスタムメッセージキューを作成します。 WAIT_TIMEOUT。
  • スレッドにメッセージを投稿するウィンドウを使用する方法。
  • TLSを使用する方法。
  • アトミック関数を使用する方法。
  • 別のプロセスにコンソールアプリケーションからの出力をリダイレクトする方法 - それは、コンパイラを起動したときにIDEがするように同じことを。
  • C ++ 11:スレッド、ミューテックス、condition_variable、lock_guard、unique_lockのクラスの使用。
  • どのようなライブラリは、アプリケーションで使用され、彼らはどこにいますか?
  • DllMainのインテリア。それを阻止するためにどのように、どのようにそれを使用することができます。

ネットワークアプリケーション:

  • プロトコル(IP、TCP、UDP、HTTP)、ソケット、遮断およびWINSOCK2ライブラリを使用してノンブロッキングコール。 、WSAAsyncSelect、WSAEventSelectを選択します。
  • TCP接続の状態とハンドリングエラー。

練習:

  • 単純なエコー・サーバ。
  • ダニタックつま先のバージョンをネットワーク。
  • ミニGitリポジトリ。

ディプロマプロジェクト「オンラインストア」:

クライアント・サーバ・アプリケーション:1サーバー、製品を購入するためのクライアント、それらを購入するには、いくつかのクライアント。 唯一の2つの製品カテゴリを販売することが最初のサーバーで。 いくつかの他の製品カテゴリーで動作するようにクラスとライブラリ - アプリケーションは、プラグインを追加する機能を持っている必要があります。 アプリは、(製品を購入)その作業を開始するために起動資本を設定するために、その非常に最初の打ち上げを認識しなければなりません。

Serverは、プラグイン(ライブラリ)を一覧表示するには、現在のディレクトリを解析してその作業を開始します。 それは新しいライブラリを検出すると、再コンパイルせずに、新しい製品カテゴリで作業できるようにする必要があります。 アプリは、クロスプラットフォームのアーキテクチャをサポートする必要があります:すべてのプラットフォームに依存するルーチン(リソース、ハードウェア)は、ロジックから分離する必要があります。

アプリは、ユーザーのとネットワークのエラーから保護されなければなりません

この学校か以下のプログラムを提供しています:
  • 英語
期間&料金
このコースは、 オンライン
Start Date
開始日
10月 2018
Duration
期間
60 時間
Price
費用
720 USD
24セッション、2.5時間、週2回