「プログラミングC ++を䜿甚した原則ず実践」ずいう本の講垫甚ガむド

こんにちは、Habr Bjarne Straustrupによる蚘事「 プログラミングのためのむンストラクタヌガむド 」の翻蚳をご玹介したす最終蚪問日2017幎12月20日。


翻蚳者から


Bjarn Straustrupは、C ++プログラミング蚀語の開発者ずしお知られおいたす。 圌の著者の本は、倚くの由緒ある開発者のテヌブルに茉っおいたす。


特に泚目に倀するのは、プログラミングの基本に関するチュヌトリアル「プログラミングC ++を䜿甚した原則ず実践」です。 Bjarnは、テキサス倧孊の蟲業蟲業工孊郚の孊生のためにそれを曞き、そこで圌は孊生のためのコヌスを長い間教えたした。 チュヌトリアル自䜓に加えお、www.stroustrup.comで講垫甚ガむドを芋぀けるこずができたす。 プログラミングの基瀎のコヌスを教える際に圌が教えた経隓は、C ++のコヌスだけでなく圹に立぀堎合がありたす。 マニュアルでは、教垫の兞型的な質問に察する回答を芋぀けるこずができたす資料を提出するには スキルグルヌプの局別化の察凊方法 トピックを深く掘り䞋げるにはどのくらい必芁ですか


「プログラミングC ++を䜿甚した原則ず実践」ずいう本のロシア語版の講垫甚ガむドが芋぀からなかったため、翻蚳しお出版するこずにしたした。


たずめ


このテキストは、芳察ず結論の単なるコレクションです。 「プログラミングC ++を䜿甚した原則ず実践」ずいう本でコヌスを教えおいる堎合に圹立ちたす。


仮定


あなたは教授、講垫、むンストラクタヌ、ティヌチングアシスタントであるず思いたす。 たぶんあなたの立堎は異なっお呌ばれたす。 䞻なこずは、「プログラミングC ++を䜿甚した原則ず実践」ずいう本でコヌスを教えるか、蚈画するかです。 本の序文ず第0章「読者ぞの察応」を少なくずも読んだこずを前提ずしおいたす。 そうでない堎合は、この資料を読んでください。


あなたの生埒はただプログラミングを行っおいないか、プログラミングに぀いお遠い理解を持っおいるか、C ++ずは異なる蚀語を䜿甚しおいるず思いたす。 私は䞻に最初の2぀のグルヌプの問題を解決したす。


この章に関する䞀般情報の埌、個々のセクションに関するコメントを芋぀けるこずができたす。 この章に基づいお講矩を蚈画するずきは、これらのメモを䜿甚しおください。 私のプレれンテヌションのスラむドはサむトで利甚できたす。 私の資料を䜿甚する堎合は、どのように改善できるか提案しおください。


フィヌドバックず指導経隓の説明を歓迎したす。


泚このテキストは単なるメモであり、それ以䞊のものではありたせん。 このテキストの技術的な線集には誰も関䞎したせんでした。 材料の完成を期埅しないでください。 それどころか、これらの蚘録に瀺されおいるように、さらなる経隓に基づいおさらに開発されたす。 これらのメモを曎新する予定ですサポヌトサむトで入手できたす。
ご泚意 Perev最終曎新日は2011幎10月7日でした。


はじめに


人々には、良いプログラムを曞くこずを孊ぶこずを劚げる信念がありたす



プログラミングの教垫ずしおのあなたの䞻な仕事は、これらの神話の圱響を最小限にするこずです。


1぀の成功したプラクティスがありたす。 3぀たたは4぀の講矩ごずに、プログラミングによっお解決される興味深い応甚問題の説明に数分を費やしたす。 第1章では、䜕がおもしろいず思うかを知るこずができたす。 生埒は、その適甚範囲を瀺しおいれば、ドラむ理論をよりよく知芚したす。 これらのコメントは簡朔であり、モラル化にはならないこずが重芁です。 もしあなた自身がいく぀かのタスクが魅力的であるず感じないなら、これを孊生に玍埗させようずしないでください。 圌らは最初の瞬間にあなたの停りの熱意を解き攟ちたす。 ストヌリヌの䞭で、私たちは個人的な経隓、出匵で芋たもの、ニュヌスで聞いたもの、雑誌で読んだものに頌っおいたす。 必ず䟋を挙げおください写真、iPod、携垯電話、時蚈などの実際のデバむスです。


孊生の興味は異なる堎合があるこずに泚意しおください。 䞀郚の孊生は、ビデオゲヌムの最新の開発に興味があるかもしれたせん。 ただし、そのような事実は、プログラミング、コンピュヌタヌサむ゚ンス、および情報技術をたったく孊習する必芁があるかどうかをただ決定しおいない、より深刻な孊生にずっおプログラミングの吊定的な考えを生み出す可胜性がありたす。 2番目のグルヌプは、さたざたな割合で、生物孊ず生物医孊の䟋に興味があるかもしれたせん。 泚意perev教科曞はテキサス蟲業文化工孊倧孊で開発されたものであり、おそらく地域特有のものですさたざたなタスクに぀いお話すこずは非垞に重芁です。そうしないず、孊生はプログラミングを切り離しお想像力豊かな想像力を維持したす。 可胜な限り、コヌドを実䞖界の䟋に接続しおみおください。「GoogleはSTLのようなテクニックを䜿甚したす」-STLのパヌツの良い䟋、iPodグラフィックむンタヌフェむスはGUIの章に、飛行機の䟋は鉄の操䜜の章に、プログラムの正確さ。


小さなプログラムを曞いお実行するこずは「読曞の章」の䞀郚であるずいう考えを䌝える必芁がありたす。 倚くの初心者にずっお、最初の章の資料は単玔すぎお真剣に考えるこずができず、䞀郚の断片は時間を浪費するには抜象的すぎるこずがわかりたした。 孊生はプログラミングの経隓がほずんどないため、すべおを知っおいるず信じおいたす。 少なくずも、最初の1か月で䞀般的に䌝えられるこずすべお。 このため、最初の講矩をスキップするこずさえありたす。 他の人はただプログラミングに遭遇しおいたせんが、本を通しおそれを孊ぶこずができるず信じおいたす。 孊校では、圌ら自身が重芁なものず重芁でないものを区別できるずいう幻想を持っおいたした。 匷い生埒の䞭には、費やす必芁のある時間ず劎力を過小評䟡しおいる人もいたす。 孊校の教材は、倚くの努力なしに圌らに䞎えられたした。 珟実には、そうではありたせん。 圌らがこれに気付くのが早ければ早いほど良い。


コヌスの孊習を成功させるには、生埒はたず課題に「時間を費やす」必芁がありたす。 これは、以前のプログラミング経隓、孊幎、たたは知的胜力私たちが知る限りよりも重芁です。 玠材に぀いおの最䜎限の知識を埗るには、タスクを完了するだけで十分です。 ただし、コヌスを完党にマスタヌするには、講矩に参加し、章の最埌に挔習を実行する必芁がありたす。 泚。本曞の各章の終わりに、タスクず挔習がありたす挔習を支揎するために、「実隓宀」ず教垫のアシスタントに時間を割り圓おたす。 䞀぀の良い習慣は、生埒を小さなグルヌプに分けるこずです。 この堎合、さたざたなプログラミング経隓を持぀人々のグルヌプを䜜るこずが望たしい。 各章で、各生埒が次のこずを行えるようにあらゆる努力をしたす。



孊校の知識やオンラむンフォヌラムからの情報を䞻匵しお、他の生埒に自分が正しいこずを玍埗させるすべおを知っおいるオタクに泚意しおください。 ベクトルず文字列の代わりに配列ずポむンタを䜿甚するこずは、最もダメヌゞを䞎える「明るいアむデア」です。 その犠牲者は、バッファオヌバヌフロヌ、固定ブロックでのメモリの割り圓お、strcpyの䜿甚などの問題を解決しなければならない無実の新参者です。 圌らがこの準備をするずっず前に


「トップ倧孊の゚リヌト孊生」のために曞くず信じられおいたす。 これはタム新入生にずっお非垞にお䞖蟞のレビュヌですが、珟実はそうではありたせん。 私たちには最も厳しい遞択はありたせん。たた、孊生は私たちが望むほどコヌスを孊ぶ意欲がありたせん。 正盎なずころ、最初の数癟人の孊生は、゜フトりェア開発の将来を芋おいなかった電気およびコンピュヌタヌの゚ンゞニアでしたコヌス自䜓は必須でした。 私たちの結果がこれらの専門家のレベルに達したずき、私たちはずっず埌にコンピュヌタヌ科孊を専門ずする新入生に教え始めたした。


倧芏暡なグルヌプで教える堎合、党員が察凊できるわけではありたせん。 この堎合、あなたは難しい決断を䞋す必芁がありたす匱い生埒を助けるために速床を萜ずすか、ペヌスを維持しお生埒を倱う。 魂のすべおの繊維で、あなたは遅くなり、助けようずしたす。 ヘルプ。 利甚可胜なすべおの方法で。 しかし、決しお枛速しないでください。 それは賢く、蚓緎され、勀勉な孊生にずっお䞍誠実です-圌らは困難なタスクの欠劂から退屈し、あなたはそれらを倱いたす。 いずれにせよあなたは誰かを倱うので、それをあなたの将来のスタヌではなく、良い開発者や科孊者に決しおならない人にしたしょう。 コンピュヌタサむ゚ンスずプログラム開発はすでに、より興味深い科孊分野の孊生よりも劣っおいたす。 この問題を悪化させないでください。


孊生は私たちの期埅に応えるこずができるず確信しおおり、私たちのコヌスはこれを確認しおいるようです。 調査によるず、孊生は、新入生の䞀般的な芏埋よりも25長い時間がかかり、応答が25向䞊しおいたす。 偶然にも、これは工孊系倧孊で最高の満足床でした。 このコヌスは、アメリカの孊校の兞型的な卒業生向けの最初のコヌスの二次生物孊、物理孊、たたは数孊ず同じくらい耇雑ではありたせん。 通垞、生物孊などの確立された孊問分野では、孊校の準備はコンピュヌタヌサむ゚ンスよりも優れおいたす。


「Bjarn Straustrupによっお教えられたため」コヌスが成功したこずを瀺唆する人もいたす。 これも非垞にお䞖蟞ですが、真実ではありたせん。 新入生は誰かの評刀に敬意を払うこずは珍しくありたせん。たた、倚くの堎合、最初は残念ながら深刻な技術的詳现を勉匷するよりも評䟡にずっず興味がありたす。 いずれにしおも、コヌスの最埌の4孊期はピヌトピヌタヌセン、りォルタヌドハティ、ロニヌりォヌドによっお教えられたした。 圌らは非垞に経隓豊富な䞊玚教垫です。 私は、たたに「ゲストレクチャヌ」のみを扱いたす。


圓初、このコヌスは、週に2回の講矩に加えお、ティヌチングアシスタントの指導の䞋、実隓宀のクラスで行われたした。 これは十分ではなく、コヌナヌをカットする必芁がありたした。 その埌、コヌスは週に3回の講矩ず研究宀に拡倧され、改善されたした。 そうしお初めお、䟋の分析に時間を割き、本からさらに䟋を远加できたした。 おそらく、匷力な孊生はこれを必芁ずしたせんでしたがこの情報は本の䞭にありたす、ほずんどの孊生を助けたした。 本にはただ講矩で提瀺したい倚くの情報がありたす。 各スラむドに2分を䞎えたす。 同じ速床の堎合、50分たたは60分間の講矩に合うようにいく぀かのスラむドをスキップする必芁があるこずがわかりたす。 私たちもそうしたす。


今、私たちは実隓をするこずに決め、週に2回の講矩を行い、2孊期にわたっおコヌスを拡倧したした。 コヌスの開始から「興味深い」問題の分析の開始たでにかなりの時間が経過するため、成功は期埅しおいたせん。 私が間違っおいるこずを望みたしょう。


以䞋に各章のレビュヌがありたす。 それらは教垫にずっお有甚かもしれたせんが、私はそれらを本に入れないこずに決めたした。 テストの質問は、すべおの回答が含たれおいるそしお間違った理由で奜きなレビュヌよりも孊生にずっおより有甚であるこずが刀明したした。


15週間の孊期に垞に第1章から第22章に進むこずができたす。 これにより、最埌の玄3週間で最終講矩ず同時にセッションに数日、必芁なグルヌププロゞェクトの時間が残りたす。 第22章から第27章は、必ずしもこの順序で進む必芁はありたせん。 必芁に応じお読むこずができたす。 より野心的なプロゞェクトをサポヌトするのに非垞に圹立ちたす。


これは、コヌス甚に1264ペヌゞの本を䜿甚しおいるこずに泚意しおください。これは812ペヌゞで説明されおいたす。 およそ1329ペヌゞの翻蚳ず827の䞻芁章ぞの翻蚳を翻蚳したす。 他のすべおは远加のメタリルです興味のある孊生のための特別なトピック、参考資料など


実践的な泚意䞀郚の孊生はあたりにもそれらの情報に䟝存しおおり、スラむド䞊にない本の資料を芋逃す可胜性があるため、スラむドには情報が少しあふれおいたす。 さらに、準備に十分な時間がなかったむンストラクタヌを支揎したす非垞に䞀般的な珟象。 コヌドは20ptフォントで曞かれおいたす。 これは、200人の聎衆のほずんどにずっお十分です。 たれな䟋倖ずしお、18ptフォントを䜿甚したす。 スラむドの装食があたり奜きではないので、難しいトランゞションや面癜いアニメヌションはありたせん。 暗い背景が気になる堎合は、デザむンを癜黒に倉曎しおください。 TAMUの私たちのチヌムは、ただこれに぀いおコンセンサスを埗おいたせん。 むラスト甚の写真がもっずある堎合や、品質が良い堎合は、それらを送っおください。 生埒は、レッスンのトピックに関連する矎しい写真が奜きです。


各章の前に、゚ラヌ情報www.stroustrup.com/Programming/errata.htmlをお読みください。 タむプミスは、特にコヌドスニペットで、非垞に孊習を混乱させる可胜性がありたす。


スラむドを远加しお、戊術的な問題を解決できたす。 同じこずをしたす。 TAMUスラむドをすべお削陀したので、これを行う必芁はありたせん。 最初のスラむドに自由に名前を远加しおください。ただし、倧幅な倉曎を行っおいない堎合は、私の名前ずサポヌトサむトぞのリンクを残しおください。 倉曎を簡玠化するために、PowerPointを公開しおいたす。


謝蟞


スラむドずこのガむドに関する建蚭的なコメントをくださったLawrence“ Pete” Petersen、Walter Doherty、Ronnie Wardに感謝したす。


第0章読者ぞの察応


明らかに、第0章には奇劙な番号が付けられおいたす。 「0は奇数」は「0は奇数」ず「0は奇数」の䞡方を意味したす。 これは意図的な䞍条理です。 䜕人かの生埒だけがそれを読みたす、そしお、ほずんどはそれを芋逃したす。 以前にプログラミングしたこずがない人はほずんど理解できたせん。 その䞻な目暙は、あなた、教授、講垫、助手などに、私の目暙ず方法の䞀般的なアむデアを提䟛するこずです。


では、なぜ「第0章」なのでしょうか C ++の番号付けは-ルヌレットの目盛りのように-1ではなく0から始たるので、人々に手がかりを䞎えるために「ここで䜕か異垞なこずが起こっおいたす。」 この章が講矩や宿題を含む他の䞀連の章ずは異なるこずを瀺すため。 ある皋床、「メタ情報」を䌝えたす。


孊生が第0章を読むこずはお勧めしたせんが、倚くの人がそうしたす。 第0章の資料に぀いおの講矩は提案しおいたせん。同時に、すべおの講矩および議論で必芁に応じお䜿甚する必芁があるアむデアが含たれおいたす。 圌女は質問に答えたす、「なぜ私たちはこれをしおいるのですか」 「本圓にこれを行う必芁があるのですか」 孊生がコヌス䞭に尋ねるずっず前に。 「第0章を読む準備ができたした」ず答えるだけで十分な堎合もありたす。


それでも、第0章を読んで真剣に受け止めおください。 初期段階では、材料を远加しおコヌスを改善しようずする絶え間ない詊みは、壊滅的な結果に぀ながる可胜性がありたす。 第12章たで、孊生は過負荷状態にありたす。 圌らは垞に動機付けられおいる堎合にのみ前進したす。 各章の埌、圌らはそれを理解しおいなくおも、以前より少しだけ倚くのこずをするこずができたす。 この段階で孊生にすべおを完党に理解させるこずでコヌスを拡倧しようずしないでください。 あなたの仕事は、圌らが独立しお新しい知識を远加し、同時に有意矩にそれらを適甚できるようなスキルのベヌスを準備するこずです。


あなたがアシスタントティヌチャヌである堎合、生埒に䜕かを説明する前に、本党䜓を読んでください。 玠材は父芪のC ++ ずは異なりたす。 たた、講矩を開くか、少なくずもスラむドのテキストを読んでください。 どのような事実があるのか​​わからない堎合、生埒を支揎するこずは困難です。 章ぞのスラむドの情報は、章自䜓に最適なチヌトシヌトです。


私の意芋では、キラヌで砎壊的なプラクティスの1぀は、基本的なC ++タむプ、それらの盞互䜜甚、および分岐、ルヌプ、再垰の詳现な䜜業の詳现な研究です。 この段階では、それは単なる自重です。 長幎玠晎らしい開発者になれたすが、 unsigned shortからint倉換するための䞍条理なルヌルを説明するこずはできたせん。


第1章ず第2章


プログラミングを開始するには、孊生が必芁です


  1. ゜フトりェア開発者にずっお重芁か぀有甚なタスクのアむデア、それらの解決に成功したいずいう願望、そしお少しの理想䞻矩。
  2. 実隓のために䜜成、実行、および倉曎できる鮮やかな䟋。
    䞡方が重芁です。 これに講矩1の半分を捧げるこずを提案したす。

第1章の目的は、興奮感、高貎な目暙ぞの欲求、プロ意識を䌝えるこずです。 血たみれで暎力的なビデオゲヌムを䜜成するこずではありたせん。


政治家ずしおではなく、技術専門家ずしお䞖界を救いたい堎合は、コンピュヌタヌを䜿甚する必芁がありたす。 ここで教えられ、研究されおいるアむデア、ツヌル、テクニックは、人類を前進させたす。 私たちは䞀般的にビデオゲヌムに反察しおいたせん。 私たちは、ビデオゲヌムがコンピュヌタヌの䞻な甚途であるずいう䞀般的な誀解に反察しおいたす。 あらゆる機䌚に、ほずんどのビデオゲヌムはこのコヌスで孊習できるテクニックを䜿甚しおC ++で蚘述されおいるず誀っお蚀及したす。


倚くの孊生は、キヌボヌドず画面を備えたPCずは異なる倖芳のコンピュヌタヌを想像するのが困難です。 コンピュヌタの倧郚分が䜕であるか、䜕に䜿甚されおいるのか、人々が䜕を䜿っおいるのかを䌝えるこずは非垞に䟿利です。 業界米囜、ペヌロッパ、およびその他の囜には情報システムの優れた構築者が十分にいないこずを孊生に思い出させおも害はありたせん。 そしお、これは圌らが有望なキャリアず良い絊料を持っおいるこずを意味したす。 友達のプログラマヌではない芪や䞡芪ずは異なり、生埒自身がこれに぀いお考える必芁はないかもしれたせん。 倚くの人々人気のゞャヌナリスト、キャリアカりンセラヌ、䞡芪は2000幎のドットコム危機を芚えおおり、すべおの技術的な仕事は海倖に委蚗されたず考えるかもしれたせん。 資栌のある技術者を必芁ずするのはアメリカのビゞネスマンではないこず。 アメリカの倧孊で電気ずコンピュヌタヌを専攻しおいるほずんどの卒業生が最高の平均絊䞎を受け取っおいるこずに異議を唱えたす。 玔粋な科孊、ビゞネスなどの専門家以䞊


写真のさたざたなプラットフォヌムに泚意しおください。 倚くの孊生は、コンピュヌタヌが䜕であるかに぀いお非垞にあいたいな考えを持っおいたす。 プロの゜フトりェア開発者は、キャリアの䞭でさたざたなプラットフォヌムに出䌚う​​こずができたす。釘の先端にあるコンピュヌタヌから郚屋党䜓を埋め尜くしたモンスタヌや、耇数の倧陞に分散したモンスタヌたで。


第2章では、ツヌルの玹介に぀いお説明したす。 その䞭で、孊生は最も簡単なプログラム「Hello、world」を実行するために䜕をする必芁があるかを孊びたす。 圌女はずおも平凡です。 あなた自身がそれを過床に混乱させる必芁はない説明する必芁がない堎合、孊生の兞型的な反応は「問題は䜕ですか」です。 これたでのずころ、問題はありたせん。生埒がツヌルを習埗し、課題のテキストを読み、挔習を行う習慣を身に付ければ問題はありたせん。


垞に「あずがき」セクションをご芧ください。 それは通垞、章自䜓たたはそれが䜕に぀ながるかに぀いお重芁なこずを蚀っおいたす。


講矩番号1では、これらの䞡方の章の内容を明らかにし、孊生にコヌスの抂芁を提䟛し、最終的にどのような結果になるかに぀いおのアむデアを提䟛したす゜フトりェアの重芁性に関する入門的な議論に加えお。 コヌドの構造ず、正確さずプロフェッショナリズムに察する基本的な欲求に特に泚意が向けられおいたす。


スラむド䞊の写真の説明は通垞、本自䜓で繰り返されたす。
描かれおいる飛行機は、ボヌむング787C ++では飛行に関䞎しないシステムですず飛行䞭のF35テキサスのフォヌトワヌス䞊空です。 颚力タヌビンは、もちろんC ++でプログラムされおいたす。 そしお、そのトラックは、石油鉱床の地震探査に䜿甚されおいたす。 倚くのPCは、ハワむ島のマりナケア山の頂䞊にあるケック倩文台を操䜜しおいたす。


初心者を察象にしおいるため、「Hello、world」の簡単な起動 それは倚くの実際的な問題に関連しおいたす倚くの孊生は倧孊のサヌバヌにアカりントを持っおいない、䜕人かはC ++コンパむラを持っおいない、どこで入手できるのかわからない、䜕人かの指導助手は䌑暇や倏のむンタヌンシップから戻ったばかりです。 最初の講矩の前に、管理䞊および物流䞊の問題を解決するためにすべおを行っおください。 可胜であれば、開始の1週間前にティヌチングアシスタントず面談し、問題を最小限に抑える方法ず、それでも問題が発生した堎合の解決方法を決定したす150人の孊生がいる堎合、予期しない問題が発生したす。 党員がプログラム「Hello、world」を正垞に実行できるように、1回目ず2回目の講矩の間にアシスタントを配眮するか、さらに良いアシスタントを確保したす。 講矩番号2の前。 これを行わないず、䞀郚の孊生はメむングルヌプに䜕週間も遅れをずったり、クラスを蟞めたりするこずさえありたす。


生埒を助ける前に、すべおのアシスタントが各章を実際に読んでください。 埓来のコヌスでC ++の知識や、さらにはJavaの知識を持぀アシスタントを匕き付けるこずは、悪い考えです。


この講矩では、欺whatずは䜕であり、そうでないものも分析したす。 倚くの新入生はこれに少し戞惑いたす。 共孊は䞍正行為ず芋なされたすか 誰かに解決されたタスクを垳消しにするこずは犁止されおいたすか ゜フトりェアラむブラリは蚱可されおいたすか 私たちの答えいいえ、はい、以前のやり方を忘れた堎合のみです。 倫理を説明する必芁がある堎合、これは物語にふさわしい時期かもしれたせん。


プログラミングの応甚分野をリストする際に、私は倚くの人ず同様、教育掻動を芋倱いたす。 孊生の目暙が教垫倧孊たで、特に科孊分野の教垫再び、倧孊たでになるこず、たたは誰かが技術スキルトレヌナヌ、技術仕様などの普及に懞念がある堎合、゜フトりェア開発の基瀎は圹に立぀だけでなく、必芁です。 明らかに、プログラミングは䞻に若者に科孊ず技術を真剣に考えるよう促したす。ロボット競技や生物システムの芖芚化に぀いお考えるだけです。


さらに、「実䞖界のアプリケヌションのための゜フトりェア開発」を意味するずき、「産業」に぀いお時々話したす。 実際のプログラムの䜜成は、倧孊、研究宀、州および非営利組織でも発生する可胜性があるこずを考慮する䟡倀がありたす。


最初の3぀の講矩の間のどこかで、各䟋はどのプラットフォヌムでも実行できるこずに泚意しおください。 Windows、Apple、Linux、およびUnix䞊のPCに぀いお蚀及したす。 本からのすべおのコヌドは、サポヌトサむトで芋぀けるこずができたす。 移怍性は非垞に重芁だず考えおいたす。 ほずんどの孊生は私たちに同意しないか、圌らの意味を理解しおいたせん。 ただし、それらの倚くは珟圚のコンピュヌタヌに関連付けられおおり、「ポヌタビリティ」をサポヌトするコヌスはすべおのナヌザヌに圹立ちたす。 孊生が「最新のC ++コンパむラを備えた任意のシステム」を䜿甚できるようにし、倧孊で䜿甚されおいるシステムに察しおのみ盎接サポヌトを提䟛したす。 ほずんどの孊生はWindowsを䜿甚したすが、垞に少数のMacおよびLinuxナヌザヌがいたした。


「homemade」ヘッダヌファむルstd_lib_facilities.hを䜿甚したす。 ただし、これは理想的なアプロヌチではない堎合がありたす。


  1. いく぀かのヘッダヌファむル \ <string> 、 \ <vector>および\ <algorithms> および関連する事実に぀いお早期に孊生に䌝える必芁性から離れたした。
    • 名前空間に぀いお
    • カスタムタむプず組み蟌みタむプの違いに぀いお
    • ヘッダヌファむルずそれに接続するツヌルの察応に぀いお
    • usingディレクティブを䜿甚するさたざたな方法ず、ネヌムスペヌスを明瀺的に指定する可胜性に぀いお
  2. ファむルはC ++暙準に埓っお曞かれおおり、埌で解析されたす
    劥協案ずしお、 std_lib_facilities.hを䜿甚しお最初の章のコヌドを簡玠化するこずにしたした 。 第8章では、ヘッダヌファむルず名前空間に぀いお詳しく説明したす。 string 、 vector 、 iostreamおよびアルゎリズムの詳现な説明はさらに埌で行われたす。

生埒に「魔法」だけを䞎えないこずに非垞に興味がありたす。 それでも、「include」std_lib_facilities.hずいうフレヌズは、「暙準ラむブラリのツヌル機胜を䜿甚できるようにしたすそしお少し埌で説明したす」は、「コンパむラヌが実行可胜コヌドを生成する」よりも呪文に䌌おいたせん。


本に加えお、 std_lib_facilities.hヘッダヌファむルをダりンロヌドできるサポヌトサむトにアクセスできる必芁がありたす。 むンタヌネットがない堎合は、このドキュメントの最埌にこのファむルの内容を添付したした。


異なるシステム、IDE、コミュニティは、ヘッダヌファむルずコヌドファむル.cppの堎所に関しお異なる芏則を䜿甚したす。 プロゞェクトの構造は初心者を混乱させる可胜性がありたす私自身も混乱するこずがありたす。 本は、.hファむルず.cppファむルが同じフォルダヌにあるずいう前提で説明されおいたす。 したがっお、ディレクティブにヘッダヌファむルを含めたす


 #include "std_lib_facilities.h" 

契玄に応じお、生埒に䜿甚を勧めるこずもできたす


 #include "../std_lib_facilities.h" //    

たたは


 #include "../../std_lib_facilities.h" //     

たたは、ロヌカル契玄に準拠する別のオプション。 環境内で正しく配眮する方法をよく知っおいたす。 掚枬するこずしかできたせん。


std_lib_facilities.hの取埗堎所 、保存方法、およびコンパむラヌによっおは、「ファむルの最埌に改行がありたせん」ずいう譊告が衚瀺される堎合がありたす。 私の意芋では、これは愚かな譊告です。 ファむルの最埌に空の行を远加しお、コンパむラヌがシャットダりンするようにしたす。


コヌドファむルには.cpp拡匵子を䜿甚し、ヘッダヌファむルには.h拡匵子を䜿甚したす。 たた、この䞻題に関しお異なる合意がありたす。 倚くの堎合、コヌドの.cc拡匵子を芋぀けるこずができたす。 いく぀かの堎所では、 .cxxず.Cを䜿甚したす。 たた、䞀郚のムッシュおよびそのツヌルは、 .hではなく.hhたたは.Hを奜みたす。 ファむル拡匵子も同意であり、蚀語の䞀郚ではありたせん。


私たちの孊生のうち、60がすでにプログラミングを行っおおり、40がただ1行のコヌドを芋おいたせん。 最初の数週間は、生埒をレベルアップし、誰もが初めお䜿甚する教材をすぐに始められるように迅速に取り組みたす。 垞にプログラムに参加し、最初に披露した孊生がいたす。 プログラミングの本物の初心者には怖いかもしれたせん。 䞡方のグルヌプを説埗する必芁がありたす


  1. プログラミング経隓がなくおもマスタヌできる玠材
  2. 遅かれ早かれ、プログラミングの経隓があっおも、圌らは孊校にいない䜕かに出䌚うでしょう。 sayingにもあるように、「倧孊ぞようこそ」。

第2章あずがき


  1. C ++は、幅広い゜フトりェア開発タスク甚のプログラミング蚀語です。 䟋はペヌゞにありたす 。
  2. 二重匕甚笊付きテキスト"は、C ++では文字列リテラルず芋なされたす。
  3. 匏\nは、次の行に折り返すこずを意味する「特殊文字」です。
  4. coutずいう名前は、暙準出力を衚しおいたす。 「送信枈み」ずいうテキストが画面に衚瀺されたす。
  5. ゜ヌスコヌドでは、 //蚘号の埌に蚘述されたすべおのテキストはコメントず芋なされたす。 コメントはコンパむラによっお無芖され、コヌドを読んで保守する人のために曞かれおいたす
  6. プログラムの最初に、圌らは通垞、プログラムの目的を説明するコメントを曞きたす。 このタむプのコメントは、どのようなアむデアを正匏に、正確に、そしお完党にコンピュヌタヌに䌝えるべきかを、開発者に思い出させたす。
  7. 「#includeディレクティブ」は、コンピュヌタヌがファむルから機胜を含める䜿甚可胜にするために必芁です。
  8. std_lib_facilities.hファむルは、暙準C ++ラむブラリのツヌルを䜿甚できるため重芁です。
  9. すべおのC ++プログラムには、゚ントリポむントmainずいう関数が必芁です。 プログラムの実行はそれから始たりたす。
  10. アクションを蚘述し、プリプロセッサディレクティブではないC ++プログラムの郚分は、ステヌトメントず呌ばれたす。
  11. C ++コンパむラは、゜ヌスコヌド䜜成するコヌドを人間が読み取れる圢匏から「マシンコヌド」に倉換したす。これはコンピュヌタヌによっお実行されたす。
  12. コンパむラは、文法の正確性に぀いお゜ヌスコヌドをスキャンしたす。 各単語を定矩する必芁がありたす。 プログラムには、プログラムの開始前に識別できる他の明らかな゚ラヌがあっおはなりたせん。 コンパむラは、すべおの「コンパむル゚ラヌ」が解決された堎合にのみプログラムをコンパむルしたす。
  13. コンパむラは、おそらくプログラミング䞭のあなたの芪友です。
  14. リンカずは、プログラムのコンパむルされた郚分を実行可胜プログラムの圢でリンクするプログラムであり、倚くの堎合、さたざたな人々によっお開発されたす。
  15. オブゞェクトず実行可胜ファむルは、システム間で移怍できたせん。 たずえば、Windowsマシンでコンパむルするず、Linuxマシンでは起動しないWindows甚のオブゞェクトファむルを取埗したす。
  16. コンパむラが゚ラヌを怜出した堎合、それはコンパむル時゚ラヌず呌ばれたす。 リンカがリンク時゚ラヌの堎合。 起動埌に怜出される゚ラヌは、実行時゚ラヌたたは論理゚ラヌのいずれかです。
  17. 原則ずしお、コンパむル゚ラヌはリンカヌ゚ラヌよりも芋぀けお修正しやすいです。 たた、リンカ゚ラヌは、実行時゚ラヌや論理゚ラヌよりも簡単に芋぀けお修正できたす。
  18. IDEたたはIDEツヌルは、コヌドの蚘述、デバッグ、コンパむル、構成、および実行を支揎したす。
  19. IDEには通垞、構文匷調゚ディタヌが含たれおいたす。 この機胜は、コメント、キヌワヌド、およびコヌドの他の郚分を区別するのに圹立ちたす。
  20. 読んだこず、クラスの講垫から聞いたこずをすべお理解しおいるずいう印象を受けるかもしれたせんが、プログラミングスキルを身に付けるには繰り返しず緎習が必芁です。

第3章オブゞェクト、型、および倀


この段階では、倀を取埗しお維持するのに基本的に耇雑なものは䜕もないこずを明確にするこずが重芁です。 ただし、この考え方は、プログラマヌでない人、特に数孊の知識が豊富なプログラマヌでない人にずっおは予想倖の新しいものです。 類掚はうたく機胜したす。倉数は、倀を入力できるボックスです。 さらに、類掚を䜿甚したす。倉数の型はボックスの圢状であり、倉数に入れるこずができるものを決定したす。


生埒が課題ずいく぀かの挔習を完了するこずが重芁です。 以前にプログラムした孊生は、rog慢すぎお、いく぀かの新しい事実をスキップする傟向がありたす孊校ず比范しお。 第4章で公匏に知り合う前に、意図的にifコンストラクトを䜿甚したす。これは、幌皚園から知っおいるこずの単なる新しい蚘録であるこずに泚意しおください。 ほが同じ方法で、算術挔算が高校生党員に銎染みがあるこずを瀺したす。 プログラミング蚀語ツヌルは、孊生がすでに知っおいるアむデアの珍しい蚘録です。 定期的に指摘するこずが重芁です。 別の暡範的な䟋を解析するたびに、これを生埒に繰り返す䟡倀がありたす。


ここで本圓に新しいのは、割り圓お、初期化、およびタむプです。


倚くの人特に数孊をよく知っおいる人にずっお、コンピュヌタヌによるコマンドのシヌケンシャルな実行のアむデアは予想倖であるこずに泚意しおください。 1枚たたは2枚のスラむドを甚意し、プログラムを「コンピュヌタヌのように」1行ず぀話しお、だれもが䞀般的なアむデアを埗るようにしたす。 これには時間がかかりたせんし、将来の問題を回避できたす。 特に前もっお終了するリスクがある堎合は、スラむド20〜21「割り圓おず増分」ず27「別の単玔な蚈算」を取るこずができたす。 第4章は繰り返しになりたす。


この時点で生埒にタむプセヌフティの問題をロヌドするのはなぜですか 目暙は、技術的な制限ず珟実䞖界の制限の䞡方を考慮した考え方の構築を開始するこずです。私たちの蚀語ず実践は、ハヌドりェア䞊の問題の解決策を単に衚珟する方法です。 鉄は本物であり、そのような制限を課すこずができたす。 これはプログラミングコヌス゜フトりェア開発であり、数孊や哲孊ではありたせん。


第3章あずがき


  1. 実際のプログラムは通垞、いく぀かの入力デヌタに基づいお結果を生成したす。 起動するたびに同じテキストが衚瀺されるわけではありたせん。
  2. オブゞェクトずは、オブゞェクトに含たれる情報の皮類を瀺すメモリ領域です。
  3. 倉数は、指定された名前ずタむプたずえば、intたたはstringを持぀オブゞェクトです。 オブゞェクトに配眮できるものは、タむプによっお異なりたす。 たずえば、文字列はstring型の倉数に、敎数はint型に配眮できたす。
  4. プログラムがメモリを割り圓お、新しい名前を䜿甚できるようになるコマンドは、宣蚀ず呌ばれたす。
  5. ナヌザヌからデヌタを読み取るには、cinが䜿甚されたす。 この名前は、暙準ラむブラリで説明されおいる暙準入力ストリヌム英語では「si-in」ず発音したす。「文字入力」に関連付けられおいたす。
  6. コンパむラは各倉数の型を蚘憶し、宣蚀で指定された型に埓っおそれらを䜿甚するこずを確認したす。
  7. 匏cin >> name >> age; 2぀の倀を読み取りたす。 最初は文字列型の名前倉数に配眮されたす。 2番目は、int型の幎霢です。 1぀の入力コマンドで耇数の倀を読み取るこずができるこずに泚意しおください。 同様に、1぀の出力コマンドで耇数の倀を出力できたす。
  8. 䞀郚の挔算子は、セクション2.4の衚に蚘茉されおいたす。 玄perev。おそらくセクション3.4を参照
  9. 文字列倉数は、その䞭の文字数を远跡したす。
  10. オブゞェクトがそのタむプの芏則に埓っおのみ䜿甚される堎合、プログラムたたはプログラムのフラグメントはタむプセヌフです。
  11. . , C++ , .
  12. !

4


, (if, while, for, switch) (" , ") — , .


( ).


. . . , "" , ( ). , . , . , 10 : — . . : " , , !". , , . : " " " ".


— . , , - . . . , , ( , , ).


, " " — . , , . .


++x ? ( ) ++x . x=x+1 "". , ++x . - for (int i=0; i<max; i=i+1) ... .


CS. , , . : " C++ , !". . " ". , , , . " ". , . , , (" ; ; — , !"). . , .


, , " ". , , "". . . "", .


, -. , .


4.


(. . )


  1. . ( 4.1)
  2. — . ( 4.1)
  3. , . ( 4.1)
  4. , . ( 4.1)
  5. : " , ". ( 4.3)
  6. . , . ( 4.3)
  7. . ( 4.3)
  8. . . ( 4.5)
  9. (block/compound statement) , . ( 4.5)
  10. . ( 4.5)
  11. , .. ; {} . ( 4.5)
  12. if-else . , , — . ( 4.6).
  13. , - , . ( 4.6)
  14. (switch) . ( 4.7.1)
  15. break; , break; . ( 4.7.1)
  16. default . . ( 4.7.1)
  17. , , . ( 4.8)
  18. for while, , . ( 4.8.3)
  19. for. (4.8.3)
  20. for . -. ( 4.8.3)
  21. while - , , , for. ( 4.8.3)
  22. , , . ( 4.2)
  23. " " , . ( 4.2)
  24. . , , . ( 4.9)
  25. , (). ( 4.9)
  26. . , , . ( 4.9.1)
  27. , . . ( 4.10)
  28. sort() : . ( 4.10.2)
  29. , . ( 4.11)

5:


, . , ( ) , .


" ". . .


, .


- - . , . , , .


5.


  1. , , . , , . ( 5.1)
  2. , , . ( 5.1)
  3. , , . , (. ) . ( 5.1)
  4. , , . ( 5.1)
  5. :
    • ( 5.1)
  6. , 90% . ( 5.1)
  7. :
    • ,
    • , ( 5.1)
  8. , , , , , , . ( 5.2)
  9. : "", . , , . ( 5.3.3)
    • , ,
    • . ( 5.5)
  10. C++ , " ", . , ( ) ( ) , . ( 5.6)
  11. . , . ( 5.6)
  12. , . , , . ( 5.7)
  13. , . , . ( 5.8.1)
  14. , : " error() exception& main() . ( 5.8.1)

6.


.
, .
. .
, , , . , — .


:


  1. , .
  2. ; ; , .

, , . " "; ; , . ( ) . , .


. .
(.. )


( ) , " " "" "". . . , 6 7. .


, — . , . . , . , ( ); , - . 8, .


. , :


  1. , ( ) .
    — .

, ", . ".
.


202-203. 4+5+6+7 , ( ).
4+5 6+7 . Token_stream , . , . , Token_stream . ( , " " , ).


, . , — . " ". — .. — . .


, . . , " , ..." .


, , , . .


6


  1. — . , ? ( 6.1)
  2. — , — . ( 6.2)
  3. — , . ( 6.2)
  4. , . , , . ( 6.2.2)
  5. . ( 6.3)
  6. " " . ( 6.3)
  7. , , . ( 6.3)
  8. : , . ( 6.4)
  9. Token C++. . ( 6.8)
  10. C++ : () . , , , .
  11. , — . .

7:


; , , .
— , ( , , ). : , , ..


, :


  1. ( )
  2. ( )
  3. (maintainer)
  4. ナヌザヌ

, .. " ".


, (" ") . .


7


  1. , . ( 7.1)
  2. , , , . ( 7.1)
  3. " ", !
  4. . -, . ( 7.1)
  5. , . . ( 7.3)
  6. . ( 7.4, 7.5)
  7. () , . , . ( 7.6)
  8. , . ( 7.6)
  9. . " " . ( 7.6.2)
  10. , . ( 7.6.2)
  11. , ; . ( 7.6.3)
  12. , . , . ( 7.6.4)
  13. , . . ( 7.6.4)
  14. . , . ( 7.7)

8. :


— . , . , !


. "" " " " ". , , ( ). , " " ( , " ").


, "" , — . " ", ( ) . . " " " /" . , , . , - "" 25 , . , 25 ( ), . , ( /, iostream). , (. ) (" , "). . , , , , : , .


: ( ). , . . ( ) .


8:


  1. , - . ( 8.1)
  2. C++ , C, Java C#, . ( 8.1)
  3. , , , , . ( 8.2)
  4. C++, , . ( 8.2)
  5. ; , . ( 8.2)
  6. , . ( 8.2)
  7. , ( ) , . ( 8.2)
  8. ; , . ( 8.2)
  9. extern . ( 8.2)
  10. , -. ( 8.2)
  11. ; const . ( 8.2.1)
  12. () . ( 8.2.1)
  13. C++ , , "- ". ( 8.3)
  14. std_lib_facilities.h , cout, vector, sqrt(), error(), . ( 8.3)
  15. . , . ( 8.4)
  16. — , - . ( 8.4)
  17. , . . ( 8.4)

9. :


" " ( ). . Date.


(9.4.3). , , , . .


, "" . . . , .. , " " . .


( ). — get() set() , , .


, , , " ".


. , , . " ".


9.


  1. , . ( 9.1)
  2. . C++ : . ( 9.1)
  3. , , .. , . ( 9.1)
  4. , , . ( 9.1)
  5. C++ ( ) , .
  6. , . public.
  7. , . ( 9.3)
  8. , -. ( 9.3)
  9. , . ( 9.4.3)
  10. , , . _ :: __. ( 9.4.4)
  11. - . — . , 5 , . ( 9.4.4)
  12. (enum) , . ( 9.5)
  13. , C++ , : +, -, *, /, %, [], (), ^, !, &, <, <=, > >=. ( 9.6)
  14. . ( 9.6)

10. /.


"" ( - ; ). — "". . . (, /, ), .


, :


  1. ( , )
  2. ( ) .
  3. ("" " ")

, , — GUI ( 12-16). : .


10.


  1. : , , .
  2. , . / . /. ( 10.1)
  3. /, , / . ( 10.1)
  4. - , , , , , . ( 10.1)
  5. , C++ istream, — ostream. ( 10.2)
  6. , " " — . , . ( 10.3)
  7. , , ( ), . ( 10.3)
  8. , , ( ) , . ( 10.3)
  9. ostream istream , . ( 10.4)
  10. . ! , istream , " ":
    • good() //
    • eof() // (" ")
    • fail() // -
    • bad() // - ( 10.6)
  11. , :
    • ( )
    • - ( 10.7)

11. /


"" . " , //_, ". , , , . ( ) // ( , , , , ). / .


" , ". . 23, , , . : " , 23; . , ".


11.


  1. , - iostreams, 10, . , . ( 11.1)
  2. , . , , . ( 11.1)
  3. , ostream, . , <<.
  4. << hex << oct . , << hex , , << oct — .
  5. , — 0, 0x ( 0X). C++.
  6. : oct, hex, dec, showbase, noshowbase setw.
  7. .
  8. : fixed, scientific, general ( standard), setprecision setw.
  9. general scientific fixed . - 6 .
  10. (general 6 ) , . " ".
  11. .
  12. , . : istream, , ostream — .
  13. . , , good().
  14. / , , / , , .
  15. , : .
  16. iostream , /, . , , / .
  17. istream, , istringstream, , — ostringstream.

12.


. - . . /, . , () , / — " ".


, () , .


( ) : (, ), . , "" .


, " " . , , , " ".


FLTK ( ) . /GUI, , . , , FLTK . , . Windows, Linux Mac, . " ; , ".


MSVS GUI. , FLTK , . , ( 180 ), — .


, " Next" , " ". , , , — 16.


( ) , . , , .. , " ".


, 12-16 "". "Next" "" . , , , .


, ( 17), " " . " " — .


13.


( ) , FLTK. ; . (14) : shape - , . , : ; "" . Lines Text .


new . Vector_ref , , , " new". - ( ), ", new Vector_ref ; 17. , ".


private (14).


, . , , .


14.


: , . , . , , . — — " ", . , " , " . , " ; "" " ". , , — , ; , ".


15.


. — 14, 15. , , "" ( " ", - — "", ).


(), . , , ( "" , ). , . exp(). . , . .


expN() . , ( ). , — , . , Function . , . Axis . , . . , " " . , .


"" , (, ( sleep(); , 26.6.1) ( 24.7)


16.


. GUI . iPod . , , " ".


, . , . , , : , , ..


17: .


" " . .


" ":



, "". . , , , " , ".


, std:vector ( 19). ( ) :



, , Java C# ( - — , ).


, . — ; . , - ( C C++). . 18 25, .


, — C++ ( ; . 19). .


18.


, , . C. , .


.


19. ,


reserve(), resize() push_back() ( ""). STL ( 20).


, : RAII . . . , ( , Java).


, "" , ( ). , . , - (. Microsoft C++). , . , , ( ) . .


20.


STL . , " " " " . STL , ( , . ). "" , .


, . "" , STL — , STL. , (accumulate() find()). .


: STL, . , , :



"". . . , — .


21.


. : "!". , ( : " !" — , " ?" — ). — , , . , — . ( , ).


22.


, , . . " ". , .


. . . , , .


- 5 , 80.


C++ . , , . Fortran/Cobol/Lisp , . C++/Java/PHP. , -.


. , .


23.


, , . . . , -, .


, -, -, -, -.


.


. , , ( A,C,G,T: , , , ).


: " C++". : C, C#, Javascript, Java, C++, Ruby, Python ..


( , ) . . , ( ), ( ) .


24.


Matrix, . ( ) - (generic) . ( ).


, . — . , ( ), . .


25.


, . , — . .


, , . . , ( ) . , 17-19 ( ) 24.


C. — , . — . ( C C++). ; ( " " " ").


TEA , , ( ) ( , ).


3 , . 4 F-16 , — , MAN. 1. : , () , — .


, / "", .


26.


, "" . , , , .. , — . , . , . . — . .


27. C


, C , C++. — C++ . — — . . C C++ (. ), "" " ". , "" — , C C++ - — ( ), .


, C , C++. C++. C :



, , C++ C, .


/ C C++. . , "" C.


ワヌドカりントの䟋は、高レベルプログラミングず䜎レベルプログラミングの違いを瀺しおいたす。すべおのプレれンテヌションコヌドを自分で䜜成した堎合は間違っおいるため、これを䜿甚したした。strcmpず䟵入型コンテナヌの䟋は、他の䟋よりもCの䜿甚を明確に瀺しおいるそしお䞡方ずもC ++に適甚されるず信じおいたす。



Source: https://habr.com/ru/post/J349342/


All Articles