ピュアC ++



知り合いになりましょう。
私はセルジュです。 (写真では-私ではありません)。 私はインテルで働いています。 同僚と一緒にGPAを作成します。 私は20年前からプログラミングをしています。 まあ、学校から数えるなら。 最近、私は誰かと共有したい多くの異なる考えが蓄積されています。 良いことと悪いことを誰かに伝えてください。 空虚を伝えることもできます(さらに穏やかで、誰も気を散らさず、彼の最も正しい意見に煩わされません)が、あまり効果的ではありません。 したがって、ここで私の考えをマージします。 突然誰かが便利になります...



はじめに
多くの人が、CとC ++という2つの関連言語があると考えています。 同時に、C ++はおそらく同じCで、たった2つのプラスしかありません。 おっと。 これは非常に一般的な誤解です。 「実際、これはそうではありません。」 CとC ++は、まったく共通点のない完全に異なる言語です。 ただし、歴史的に、C ++はCと構文的に互換性があります。 Cで記述されたプログラムをコンパイルできます。この機能のため、言語間に明確な境界線がなく、これらの言語の不気味な混合物で記述された多くのコードがあります。 さらに、この混合の割合は、1人の著者による1つのプログラムのフレームワーク内でも変化する可能性があります。 このような創造性を「C with classes」という言語と呼びます。 「クラスでのC」の使用は、状況や手元のタスクによって決まる意識的な選択になる場合があります。 残念ながら、たいていの場合、そのようなコードは、作者の野心と実際の能力との大きな違いを単に示しています。 旅の始まりに過ぎない場合は、純粋なCやパスカルなど、より厳格なものを使用することをお勧めします。 そして、これらの言語で混雑したときにここに来てください。



状況とタスクといえば。 「本当のプログラマー」とは誰だと思いますか? いいえ、ハッカーではありません。 そして、すべてのプログラミング言語を知っている人ではありません。 そして、最もクールなプログラムを書くことができる人でさえありません。 プログラマーは、指定された時間内に一定の品質レベルで設定されたアルゴリズムの問​​題を解決できる人です。 この定義を数回ゆっくり読み直し、各単語を熟考してください。 タスク、期限、プログラミングの品質が発生しないような単純なことを理解してみてください! それは創造性、訓練、実験、研究、その他何でも構いませんが、プログラミングではありません。 プログラミングの結果は人々にサービスを提供するプログラムであるため、その開始以来、毎日、人々のためにその問題を繰り返し解決しています。 プログラマーという用語の定義のウィキペディアでさえ、「タスク」という言葉に3回言及しています。 無限に長い時間で書かれた完璧なプログラムを誰も必要としないことを理解してください。 人々は少なくともここで、そして今、極端な場合には明日、問題を解決する何かをもっと喜んで使うでしょう。 また、問題に対するより多くの簡単で快適な解決策がすでに存在する場合、悪臭を放つ手芸を使用する人はほとんどいません。 「クールな装身具」を長期間使用する人はほとんどいません。 画面を走り回るさまざまな動物が、ウィンドウおよびメニューアニメーションの特殊効果、最も正しいオペレーティングシステムなどをだましました。 -このすべてのジャンクは、若い世代の間でWOWエフェクトを作成する運命にあり、その後、忘却に陥ることは光栄です。 品質保証について話すことができます。 タイミングについて何か説明してください。 ただし、自分でタスクを探す必要があります。



C ++について話す時が来たと思います。 すでにこの言語についての厚くてスマートな本を読んで、あなたの最初のプログラムを書いてコンパイルしたことを願っていますか? まだ読んでいない場合は、少なくとも言語の構文を理解したときに話します。 まだここにいる場合は、おそらくこの言語が構文レベルでOOPをサポートしていることを既にご存じでしょう。 ただし、「クラスのあるT」に陥らないように、自分にとって重要なことを1つ理解する必要があります。 C ++では、すべてがクラスです。 私の指で試してみます:

void foo();  
...  
foo();

      
      





C. . C++, :

class Foo  
{  
public:  
    static void foo();  
};  
...  
Foo::foo(); 

      
      





:

class foo  
{  
public:  
    foo();  
};  
...  
foo(); 

      
      





:

class Foo  
{  
public:  
    void operator()();  
};  
...  
Foo foo;  
foo(); 

      
      





, :

namespace Foo  
{  
    void foo();  
}  
...  
Foo::foo(); 

      
      





( , ) class. , class — , . , . , «» — .

class IFoo  
{  
public:  
    virtual void foo() = 0;  
}; 

      
      





«», - . , - . , . «» .

:

template <typename TypeA> class DoIt
{
private:
    TypeA m_it;
public:
    template<typename TypeB> DoIt(TypeB it) : m_it(it) {}
    operator TypeA() {return m_it;}
};
...
TypeC c;  
TypeD d = DoIt< TypeD >(c); 

      
      





? , , . « » .



: — , — . — . C++ . . . « »

#include <iostream>  
int main(void)  
{  
    std::cout << " !!!\n";  
    std::cout << " \n";  
    return 0;  
} 

      
      





C++:

#include <iostream>  
class App  
{
public:
    int Run()  
    {  
        std::cout << " !!!\n";  
        return 0;  
    }  
    ~App()  
    {  
        std::cout << " .\n";  
    }  
};

int main(void)  
{  
    try
    {
        App().Run();
    }
    catch(...)
    {
        throw;
    }
    return 0;
} 

      
      





main . . , :

#include <iostream>  
#include <stdexcept>  
class App  
{
public:
    int Run()  
    {  
        std::cout << " !!!\n";  
        throw std::runtime_error("-     .");  
        return 0;  
    }  
    ~App()  
    {  
        std::cout << " .\n";  
    }  
};

int main(void)  
{
    try
    {
        App().Run();
    }
    catch(...)
    {
        throw;
    }
    return 0;
} 

      
      





, - . , , . , . «» C++. , try… catch — . .



, .



All Articles