C ++ 01レビュー

C ++ 01をはじめ

(バージョンに関連した)C ++キーワード

98 -63番目版

名前空間:

クラスのスコープ/学部/学校:名前空間で何1.
2.名前空間の役割:紛争命名防ぐ
:名前空間を定義する方法3. 名前空間N1 {変数}機能を
どのように名前空間のメンバー使用:
a.N1 ::メンバー名:コンテンツが少ない現在の名前空間の使用
N1をb.using :: B;
名前空間N1をc.using。

デフォルトパラメータ(スペアタイヤの存在に対応します)

1.コンセプト:定義された関数で、関数のパラメータにデフォルト値を取る場合は、使用中に渡すパラメータがまたはパラメータを渡さない場合があります。ユーザーは、引数、ユーザーの引数を渡された場合。あなたは、引数、デフォルト値を渡さない場合。

2.カテゴリー:行方不明の半分フルデフォルトパラメータとパラメータ
のデフォルト値を持ついくつかのパラメータ、ノート:半分のデフォルトのパラメータは、唯一の右の試合に左、右から左へ順番に与えることができ

void TestFunc(int a,int b,int c=1){}
TestFunc(1,2);    a=1,b=2
全缺失参数:所有参数带有默认值
void TestFunc(int a=3,int b=2,int c=1){}
{}

完全なデフォルトと型パラメータなしでは存在しません。

void TestFunc1(){}
void TestFunc1(int a=1){}  
TestFunc1();//编译失败,调用时编译器不知道应该调用哪一个

3.注:
Aデフォルトのパラメータ設定のルール:与えることを左、順次右からに
Bが。同じ時間宣言で与えられたと定義することができない二つの言葉のデフォルトの位置に一貫性のないパラメータを、知らないコンパイラ
男性と女性の友人に似ています関係:1対多の1ではない
デフォルトのパラメータは方法を提供してC:定数、グローバル変数
dCの言語がサポートしません

関数のオーバーロード!

1.コンセプト:で同じスコープ、同じ名前の複数の機能は、異なるパラメータのリストが存在する場合にかかわらずの値かどうかの同一の戻り型の用語(パラメータの数、パラメータタイプ、注文の種類)曖昧
戻り型用同じであることを説明するかどうかにかかわらず。

int Add(int,int)
double Add(int,double)
Add(1,2);
此时编译器不知道该调用哪一个

一例として、例を使用して後述します。

int Add(int a,int b);
double Add(double a,double b);

2.コールの原則:

可成功编译:
Add(1,2);
Add(1.0,2.0);

いかなる適切な機能または複数の機能を選択できない場合、コンパイルフェーズは、コンパイラは、推論の結果によると呼ばれ、関数の引数の型を推論する適切な機能を選択するであろう、コンパイラは文句を言います

编译失败:
Add(1,2,3);//int int int 没有三个int类型的定义 编译报错
Add(1.0,2.0);//int double 尝试进行类型转化,转化分为两种情况: a.int int  b.double double
此时编译器不知道到底应该选择哪一个而引起二义性

なぜC言語はできませんが3.C ++サポートは、過負荷に機能
キー:名前の符号化についてC ++やC言語のルールを、修正ルールの名前異なる
C言語の名前規則:単純に関数名の前に追加コンパイラ_
例えば:_ADD _ADD
C ++名前マングリング規則:関数のパラメータの型の名前が_ 1_ 2_パラメータ型パラメータの型関数の型にコンパイル
Windowsの:? @ @ HHHYA追加
(方法:だけ宣言するには、呼び出しを定義するためではないが、エラーメッセージ内のリンク時にエラーが発生します。ビュー)
のLinux:Z3Addii(3:3通の手紙IIの名前:二つのパラメータ)

役割4.exern「C」です:
C言語をコンパイルするための方法で機能します

引用:

1.コンセプト:参照は、コンパイラが再び参照変数を与え、新たなメモリ空間まで開きません、それは公共団体、同じメモリ空間を参照し、別名である
ニャーマイクと同等か、あなた自身のニックネームを

2.特徴:

  • リファレンスを定義する際に初期化する必要があります
  • エンティティは、複数の参照を持つことができます
  • 人生への参照は、1つのエンティティのみと組み合わせることができます:参照エンティティを引用したら、あなたは他のエンティティを参照するために行くことができません

しばしば引用された3:const参照タイプ

const int a=10; int &ra=a; //报错   
改为const int &ra=a;
const int &b=10;
double d=12.34; int &rd=d;//报错 引用变量与实体类型不一样 
改为const  int &rd=d;

変数の型の間の変換は、一時変数を借りる必要があります。
C ++のconst代表定数で、通常の変数を変更することができるだけでなく、ポインタを変更することができるだけでなく、関数のパラメータ、戻り値、およびクラスメンバ関数が修正されます。
一時的な変数:ユーザーは、あなたが一時的な変数があるスペースの内容変更することはできませんスペースのブロックのアドレスを知らない、一時的な変数の名前を知らなかった繰り返しを -多くの場合の戻り値を持つ、定数として表示されます。

4の役割-パラメータ、戻り値:
C ++のパラメータは次の3つの方法の合計を渡す:
。値によってA
。Bの送信アドレス
C-参照。

  • より効率的な伝送パラメータ(製造時の伝送パラメータは、引数のコピーではありません)もはや引数を生成しないため、比較的省スペースであります
  • リファレンス形状の引数を変更することによって変更することができる(引数パラメータは別名です)

C ++では、一般的に、転送パラメータは、時に参照を参照して可能な限りとして使用することができた場合、変更パラメータの引数にする必要はありません使用することができますconstのにも修正
組み込ま関数の戻り値を:機能スタック空間を返さない、なぜなら関数が戻る場合システムスタック空間に戻されているので、リターンスタック型上の基準空間として使用することができない機能の範囲を出た後。

参照5.パス、伝統的な価値観の効率:
パラメータ渡し効率:合格基準値の効率より高い
物質移動およびポインタ参照:実質的に同じ効果

6.基準とポインタとの間の差:!

。 -別名、そのエンティティ参照を共有同じメモリ空間参照:概念からA
下でコンパイラは、実際にはポインタのクラスを参照することによって処理される:基本となる実装からB
も下に独自のメモリ空間を有し、実際にこのように参照
するための、いずれかを基礎となる実装上の種の視点、参照とポインタがまったく差はありません
C。異なる参照とポインタ:

  • 初期化されなければならないの参照を定義し、ポインタが必要とされていません
  • 参照は初期化時にエンティティを指す後、もはや他のエンティティによって参照されず、ポインタが同時に任意のタイプの任意のポイントができる
    エンティティ
  • NULL、NULLポインタへの参照が、
  • 異なるにおけるSIZEOFの意味:結果は、参照型の基準サイズであるが、それは常にポインタである(32ビットアドレス空間を表すバイトインターネットの数によって占められる
    4バイト)
  • 即ち、即ちポインタ、エンティティ参照が引用さからプラス1つの増加インクリメントされ、ポインタは、後方型サイズオフセット
    -複数レベルの指標を、しかし多段には参照が存在しない
    -異なるアクセス・エンティティの実施形態は、明示的なポインタの逆参照を必要とし、基準コンパイラ自分自身との契約
  • ポインタ以外の参照は、比較的安全に使用します

インライン関数やマクロ関数の差:!

C言語のマクロ:マクロマクロ関数と定数
マクロ定数:
利点:コードの可読性を改善する能力、変化zenaratame
[100] int型
マクロ定数:欠陥のないタイプ、それはコンパイル型で検出されない
の#define 3.14 PI
アドレス欠陥マクロ定数のためにC ++:++、Cで使用するエンティティを変更CONSTは、そのエンティティは、単に一定ではなく、コンパイル段階でも置き換えてもよい
マクロ機能:C言語で、コードの動作を向上させるために効率は比較的代わりにマクロ機能を使用しての短い数コードする
段階の前処理は、マクロ本体内のマクロ関数で置き換えることができる
利点:
、ブラケットのようなマクロ関数パラメータコードの動作効率を向上させることができる
欠点を:
マクロの1括弧なしのパラメータ関数は、誤っ引き起こすことが
マクロ機能をデバッグしない、前処理段階で置換されているので、前記
パラメータマクロを全くタイプ3、タイプパラメータが検出されない有し、エラーがされるまで遅延されますランタイムエラーは、コストの増加
4.副作用、無セキュリティチェックを

インライン-解決欠陥にマクロ機能
1.コンセプト:コンパイラは、インライン関数として処理される修飾関数、でC ++インライン
2つの効果:コンパイル時にコンパイラが、インラインでの機能を置き換えます呼び出し、以下の関数呼び出しのオーバーヘッド、コードの運転効率向上
注:インラインが推奨コンパイラの主要な推薦は、に対処するためにインライン関数として機能し、必ずしも実用的ではないであろう。ベスト長すぎる簡単に機能サイクル、再帰、機能を持ちません。
関数はクラスで定義されている場合、コンパイラは、インラインプロセスとして機能する
利点:
1。導出されたパラメータは、括弧を必要としない
2インライン関数は、コンパイル時に実行される、コンパイラは、関与する機能でありますパラメータタイプ検出器
デバッグするデバッグバージョン3.
4.ない副作用の
欠陥は:コードの膨張を引き起こす可能性が
C ++では、インライン関数として機能しないことができる:コンストラクタ、デストラクタは、仮想の静的メンバ関数を変性添加します機能

C ++の3つのプロパティ:カプセル化、継承、ポリモーフィズム

オブジェクトとクラス - パッケージ特性

1.オブジェクト指向、オブジェクト指向およびプロセス指向の違いは何ですか:
C言語は、プロセス指向で、心配することは、関数呼び出しをステップ実行して、問題のステップを解決するために、問題を解決するための手順を分析するプロセスです。
C ++は、オブジェクト指向であり、オブジェクト間の相互作用によって完了されたオブジェクト、別のオブジェクトへのもの分割、に関する。
2.クラスの定義:クラス上のすべてのクラス定義と宣言、別のクラスの宣言と定義は、ヘッダファイルは、定義を置くために、ソースファイル内のステートメントを置く- >クラス外のメンバ関数の定義した場合は、必要があります関数名の前にクラス名を上げる::
3.アクセス:公共、保護された、プライベート

  • 公共の変形メンバーは、クラスの外に直接アクセスすることができます
  • 保護されたプライベート修正のメンバーが直接クラスの外にアクセスすることはできません(ここでは保護され、民間は似ています)
  • 次のアクセス指定子は、アクセス修飾子の現れの位置からのアクセス範囲に沿って来るまで
  • デフォルトのアクセスクラスがプライベートで、公共のための構造体
    4.パッケージは何ですか?どのようにC ++でカプセル化されていますか?
    荷造り実装の詳細のものの内部を、単にオブジェクトへのインターフェイスの外部操作を提供:概念をパッケージング
    カプセル化は、クラスによってオブジェクト、インターフェースはコントロールを提供することができるにアクセスを介して外部に使用する:C ++パッケージ化する方法
    、例えば我々は携帯電話を使用していました。モバイルユーザーは、内部組織構造を知る必要がない、インターフェースを介してユーザに露出された
    前記Aスコープクラスである
    6のクラスのインスタンス:クラス型とオブジェクトの作成
    クラスと密接に関連するオブジェクト
    のクラスを:クラスを記述するために使用されオブジェクトのプロパティを持つオブジェクトは、オブジェクトが建てた家の図面と同等である方法持っている
    家の同等と外エンティティクラスの作成:オブジェクトを
    、私はクラスのサイズ見つけるのですか7
    コンパイラで推測を:最初の次に、クラスに対応するオブジェクトリストをオブジェクトのすべてのメンバーを見つける
    の両方のメンバ変数を含むオブジェクト、メンバ関数も含まれる
    結論を分析するために、図1b -各オブジェクトがメンバ関数を含んでいる場合、空間のより多くの廃棄物を
    メンバ変数と別々に格納されたメンバー関数、オブジェクトメンバ変数店のみポインタ+(すべてのメンバー関数の格納場所の先頭アドレスを指し)
    CとBを確認:
    最終的な結論:オブジェクトクラスで唯一の非静的メンバ変数を含む
    のみオブジェクトのメンバ変数は、メモリアライメントに、注意を払うを追加します
一般的な面接の質問は:空のクラスのサイズを計算しますか?

主流のコンパイラ:なぜ0空のクラスサイズは、理由の一つですか?
ABC
空のクラスサイズが0である場合は、位置が同じABCによって占め、ABCの場合は、オブジェクトと考え、実際には、ABCの三つの異なるオブジェクトされるであろう。コンパイラはABCの3つのオブジェクトを区別することはできません

多くの場合、テスト内容:

1.メモリ配置構造とは何ですか?なぜあなたは、メモリの構造を揃えたいのですか?
プラットフォーム理由(移植理由):コンピュータは、メモリ内のデータを読み出し、アドレスのみにデータを読み取ることができ、任意のメモリアドレスの代わりに指定されたすべて読み取ることができます。
効率的な理由:データは、特定のアドレスで読み取ることができるので、非整列メモリへのアクセスをいくつかのデータをアクセスするときに、プロセッサが2回の訪問を必要とする、であり、整列メモリのために、一度だけ訪問する必要がことができます。実際には、これは時間のための練習スペースです。
2.どのようにメモリ配置の構造は?
第1の本体の構造体とオフセットアドレス0の量。
変数の他のメンバーは、整数倍デジタル(アライメント数)のアドレスに位置合わせすることができます。
アラインメント=コンパイラ小さな値デフォルトのサイズと整列メンバーの数。VSは、デフォルトアライメント番号8で
最大アライメント整数倍の(変数少ない方デフォルト位置合わせパラメータのすべてのタイプの最大):構造体の合計サイズ。
ネストされた構造は、ネストされた構造は、それらの位置合わせの最大数の整数倍に整列される場合ならば、構造の全体的な大きさは、すべての最大のアライメント(ネストされた構造を含むアライメント数)の整数倍であるということです。
3.どのように指定したバイト数に応じて、コンパイラが整列するようにしますか?構造は、任意のバイト数で整列させることができるではないですか?
指定された位置合わせ値の#pragmaパック(値)の値:アライメント値指定
方法1:によって前処理ディレクティブ
二つの方法:コンパイラによっては加工することができる
ウィンドウで、VSコンパイラを、アラインメントのデフォルト数は8であり、Linuxで、デフォルト番号4整列
アライメントパラメータを設定することができない、などの既にタイプを内蔵バイト数のみ:短いCHAR(1)、( 2)、INT(4)、二重(8)... 3ありません5 ...任意の数。
4.どのような構造に対してオフセット初期位置にある部材の構造を知っていますか?
;、バイト単位のゼロオフセット、サイズから開始し、このオフセットアドレスは、2つのアライメントメンバ変数およびパラメータ、すなわち分(アライメントパラメータはsizeof()メンバ)の間の最小のために決定され
、Bメモリスタートから、サイズはそのタイプのバイト値によって占められ、場合、いない場合は、戻ってメモリに最小値の倍数整数オフセット、そしてスペースが開始されます。
C、プレスA、B、二段階は、メモリの実際の構造は、再度シフトした後、便宜上、メモリの種類の後に、占有し、その後アドレスが整列構造体の最大タイプのデフォルトの数であるかどうかを決定算出します整数倍の分(デフォルトアライメントパラメーター、バイトの最大数を入力し)、YESの場合、バイトの現在のオフセット数は、アドレス構造のサイズであり、そうでない場合、逆バイアスを継続:最小バイト数、すなわちを表します最小値の整数倍になるまでシフトアップ。

例子:
struct   A
      {
       int a;
       char b;
       double c;
       char d;
      };

int型は4バイト。charが1バイトです。フロートは4バイトです。8つのバイトを倍増。
ここに画像を挿入説明
5.最後のサイズは?マシンをテストする方法ビッグエンディアンかリトルエンディアンのですか?特定のアプリケーションシナリオの端のサイズはできますか?
大端部:下位アドレスに上位バイト。
小端:下位バイトは下位アドレスに配置されます。
unsigned int型値= 0x19345768、unsigned char型のBUFを使用して、[4]表される値
  ---------------
  BUF [3](0x68) -低級
  BUF [2](0x57)
  。BUF [1 (0x34の)
  BUF [0](0x19) -高い
  ---------------
  ---------------
  BUF [3](0x19)。 -高い
  BUF [2](0x34の)
  BUF [1](0x57)
  BUF [0](0x68) -下げる
  --------------
変数INTを定義し、CHARそのアドレスに強制*アドレスは、アドレスデータが検出されました。最下位バイトのint型の変数ならば、それはそれ以外の場合はビッグエンディアンのマシンで、リトルエンディアンのマシンです。

#include<stdio.h>
int check_sys()
{
    int i = 1;     
    return (*(char*)&i);
}
int main()
{
    int ret = check_sys();
    if (ret == 1)
    {
        printf("小端\n");
    }
    else
    {
        printf("大端\n");
    }
    return 0;
}

データ送信端は、異なるハードウェアプラットフォームに対応するため、ネットワークを介してデータを送信する際に、使用ストレージバイト順序が矛盾してもよいです。そのため、TCP / IPプロトコルは、ビッグエンディアンモードでネットワークバイト順、ネットワークで指定する必要があります。
1バイトのみのためのchar型のデータは、大小の端を重要ではありません。
それは大文字モード終了に変換される前に、非CHARデータ型のために、データがネットワークに送信されなければなりません。
環境コンプライアンスは、ネットワークデータを受信すると、受信側ホストによって受け入れました。

公開された37元の記事 ウォンの賞賛3 ビュー1055

おすすめ

転載: blog.csdn.net/weixin_43264873/article/details/104250780