C ++クラスCについてのいくつかの基本的な質問最初のノート++
「C言語は強力ですが、我々はさらにC言語の内容を統合したいと考えてC ++を学ぶの次のステップのための基礎である、学びました。」 - 教師
C ++の歴史
1979年、ケンブリッジ大学(CU)29歳の博士号デーンビャーネ・ストロヴストルップ(ヤニ・シュトラウス特別ルー)から新鮮。米国では、AT&TベルC ++のプロトタイプを開発し1983年に基づいてC ++ C言語の開発に着手(ニュージャージー州)の研究室を、入力します。
1980年はもともと呼ばれていました:クラスC(クラスとC)、1983年に正式にC ++と命名しました。1989年以来、1994年にC ++の標準化は、ANSI C ++標準を発売しました
2011年9月には、最新のISO C ++標準を承認している:C ++ 11(ISO / IEC 14882:2011)
C ++の概要
C ++オブジェクト指向プログラミング言語のOOPL(オブジェクト指向プログラミング言語)と呼ばれています
Cは、のオリジナルのアイデアを維持するためのC ++、C ++、Cのサブセットです。
増加のキーワードに基づいてC ++ C:キャッチ、クラス、constの、削除、友人、インライン、新しい、演算子、プライベート、保護、公共、テンプレート、この、スロー、試して、型ID、仮想、volatileキーワードなど。
C言語でのC ++の増加の最も重要なメカニズム、3があります。
- クラス(クラス)
- 関数のオーバーロード(関数のオーバーロード)
- 過負荷演算子(演算子のオーバーロード)
基本データ型
新しいタイプ:BOOL(ブール値)のみ二つの値:真/偽の
アサイン他のブール数には、真(0でない)、または虚偽の力に変換されます(0)
bool型(1バイト) CHARと同等
入力/出力
#include <iostream>
using namespace std;
元stdio.hにはC言語、string.hの、他の書類が可能まだ引用MATH.H
使用しますが、必要が.hファイル名の接尾辞、先行Cを削除します:
#include <cstring>
#include <cmath>
そこ上記の二つの一般的な言葉遣いのための入出力操作の間には本質的な違いはありませんが、ファイル操作はかなり異なるものになります。
一般的なI / Oストリームライブラリマニピュレータ(機能):
- setw(INT)の設定は、()、出力フィールド幅の内容ではなく、自動的にブレークされています
- 桁数の合計である:注 - てSetPrecision(INT)は、(小数点を除く)ビットの浮動小数点数の出力(A)の後に配置され
- 16進数で出力値の整数で、後続のすべての六角
- それ以降のすべての10月の整数進出力
- 出力のすべてのその後の12月10進数の値
- ENDLキャリッジリターン
setwとてSetPrecisionを使用するために、あなたはまた、追加iomanip.hでは、プログラムの冒頭で引用する必要があります#include <iomanip.h>
か#include <iomanip>
#include <iostream>
#include <iomanip>
using namespace std;
void main(void)
{
int i=33, j=35, k=12345; float f=3.14159f;
cout << setw(10) << i << setw(8)<< j <<endl;
cout << setw(3) << k <<endl; // 场宽不足,自动突破
cout << hex << i <<setw(3) << j <<endl; // 用十六进制输出整数
cout << i <<setw(3) <<j <<endl;
cout << oct << i <<setw(j/8) << j <<endl; // 用八进制输出整数
cout << setw(12) << setprecision(5) << f << endl;
cout << setw(4)<<setprecision(6)<<f<<endl; //场宽不足,自动突破
cout << setprecision(4) << f << endl; // 未定场宽,按照实际宽度输出
cout << setprecision(1) << f << endl;
cout << setprecision(2) << 314.159 << endl; }
//运行结果
33 35
12345
21 23
21 23
41 43
3.1416 //这里总位数5位
3.14159
3.142
3 //保留到一位,相当于取整(只针对0.0~9.9)
3.1e+02
Press any key to continue . . .
char s1[20], s2[20], s3[20];
cin >> s1 >> s2 >> s3;
// 等同于 scanf("%s%s%s", s1, s2, s3);
cout << s1 << s2 << s3 << endl;
// 若从键盘上输入:How are you?
// 输出结果是: Howareyou? 整行输入字符串:
cin.getline(s1, N, 结束符); // '\n' 为默认结束符,这里可以缺省参数
cin.get(s2, N, 结束符); // 一次连续读入多个(包括空格)字符,直到读满N-1个,或遇到 结束符
// getline读取但不存结束符,get既不读取也不存结束符
インライン関数
効率を向上させるために、C ++インライン関数が増加します。定義と同様のマクロが位置コンパイラの機能名が表示されるので、関数呼び出しスタックのパラメータを保存、オンラインいわゆるの関数本体のコードに置き換えます、定義、スタック解除、時間はそれが上のようにジャンプしてのにかかります。定義より便利なインライン機能、さらに機能が強くなく、単に置換文字列は、型マッチングの完全なアカウントを取ります。
関数の前に追加インライン:インライン関数として宣言
インライン関数を書く(各種スマートコンパイラの程度によって決まるが、明確に定義されていない制服、)いくつかの制限があります。
変数を定義することができます•インライン関数で、次のような文を分岐、ループを使用することができます。
•しかし、インライン再帰関数ではない、直接または間接的に再帰;
•コンパイラは、オンラインでの関数呼び出しの場合を置くことができないことを他のように。
インライン関数のコンパイラ関数呼び出しラインを得ることができなかった方は、コンパイラが自動的にインライン無視する、インラインそれは自動的に失敗し、呼び出しへの一般的な機能と考えます。
動的なメモリ割り当て
C関数mallocとfreeと同等が、新しい、より強力な削除新しいとC ++と動的に割り当てて削除して空きメモリ、
int *p=new int(10); //赋值
delete p;
int *pt=new int[10]; //数组
delete []pt;
int (*ptt)[10]=new int[8][10]; //分配80个int单元// pt是一个二维动态数组,ptt[0][0]~ptt[7][9]
delete []ptt;
int **q=new int *[10];
delete []q;
引用文
C ++は、可変基準アドレスを渡すためのメカニズムを提供します。
ヘッドは、関数のパラメータ名&住所にプラスの前に渡すと、機能は同じように呼び出します。
呼び出された関数へのアドレスで宣言された変数を渡すために、この変数の割り当ては、操作は、実際に対応する変数内の関数への直接呼び出しです。
#include <iostream>
using namespace std;
void swap(int &a, int &b) // 引用声明传递a,b变量的地址
{
int t=a;
a=b;
b=t;
}
void main()
{
int i=3, j=5;
swap(i, j); //交换i, j的值
cout << i <<'\t'<< j<<endl ;
}
// 输出结果 : 5 3
// a和b的值已经交换
変速機は、構造(オブジェクト)である場合ので加えて参照(変数アドレスを渡す)を書き込む際の手順を簡略化するだけでなく、プログラムの効率を改善するために、単にので、関数は、C言語に応じて通過することなく、直接アクセスすることは、そのアドレスを渡しますパラメータリスト機能へのモード構造(オブジェクト)の値。
後で参照してください:クラスのコピーコンストラクタ、この参照メカニズムの道を(変数のアドレスを渡す)、および贅沢が、必要ではありません。
関数の戻り値もわずかリターンアドレスの量を渡すので、直接アクセス関数を呼び出す、ようにC言語の値を渡すことなく、転送量が返されたコピーした後に戻りますように、参照を返すことができます。しかし、ローカル変数への参照を返すことができません。
using namespace std;
const int &max(int &a, const int &b)
{
return a>b? a:b;// 返回的是a或b也就是i或j的地址
}
void main()
{
int i=3, j=5, k;
k=max(i, j); //取i, j的值
cout << k <<endl ;
}
参照(リファレンス)は変数の特別なタイプであり、それは変数のエイリアスと考えることができます。
int i, j;
int &r=i; // 变量引用,r和i是同一个内存单元
// r不能再改变引用,可以认为r是i的别名
i=10;
j=r; // 等价于i=20
const型修飾子
CONSTは、非変更、すなわち一定の量を作る、または上記で定義された変数の型前後の型修飾現れます。
たとえば、int const a=1;
又はconst int a=1;
変数は定数Cに非変更量と同等になることが、C言語の関数CONST定数よりも強い、としてベルト式CONSTです。
多くの場合、機能やコンテンツのパラメータの値の不注意による破壊を防止するために使用されるのconstファンクションのパラメータが参照しました。
例えば、strcpy(char *str2, const char *str1);
STR2に文字列STR1をコピーすることもできます。パラメータはSTR1のCONSTとして定義され、それは損傷を防止することにある文字列STR1 strcpyの関数にいいます。
具体的には、アドレスC ++における質量の導入機構、CONST値を参照するか、関数のパラメータ変数を変更しないコンテンツを確実にするために、意味します
多くの場合、オブジェクト
のワンタイム初期値の定義に加えては、そのときの一般的な保護効果という、その値を変更することはできません。
const STU a={"Zhang San", 'm', 2019000001};
多くの場合、データメンバ
struct STU
{
char name[10];
char gender;
static int const sno=1;//静态常数据成员
//static与const同时出现
}
しばしばポインタ
例えばSTU *const p=&a
、唯一の初期化に割り当てることができます
多くの場合、オブジェクトポインタが指している
ことが多いのポインタSTU *const p
とポインタの一般的なSTU *p
ポイントにすることはできません正常に対象を
使用const STU *p = &a;
へのポインタを。ポインタを変更することができる
結論:指し示すオブジェクトポインタを通常一定のポインタではなく、修正することができる、また、通常のオブジェクトを指すことができます。
多くの場合、多くの場合、尖ったオブジェクトポインタは、
const STU * const p = &a;
初期化の時間を指し、変更できません
有効範囲と可視性
C ++導入のスコープ演算子(スコープ演算子)「::」、我々は同じ時間(最大)とグローバル変数(:: MAX)で同じ名前のローカル変数にアクセスできるように、
#include <iostream>
using namespace std;
const int max=10000;
void main( ) // 从键盘上读入10个数,求最大值max输出,但最大不超过10000
{
int max, i,j;
cin >> max;
for (j=1; j<10;j++)
{
cin >> i;
if (i>max) max = i;
if (max > ::max) max = ::max;
}
cout << max<<endl;
}
//若max大于外部变量max的值,则取外部常量max的值, 这种做法通常用来防止数组越界或溢出。
デフォルトパラメータ
あなたは右の1つまたは複数のそのような関数コールのより多くのパラメータから省略することができます。
デフォルト値は、関数宣言中の1つのまたは複数のパラメータとして指定することができ、それが正しいものか、そのような関数呼び出しの複数のパラメータを省略することができます。
void delay(int day=1, int month=3, int year=2019)
{............}
データの抽象化
データ型とオペレーションの分離、データの抽象化と称される
T abs(T i)
{ returni<0?–i:i; }
オブジェクト
A(群)の変数、ならびにこれらの変数の関数オブジェクトと呼ばれ、包装ユニットとして(群)に作用します。
同じクラスのオブジェクトが(共通の特徴の説明)抽象的であり、オブジェクトは、クラスのインスタンスです。
オブジェクトがクローズしている、あなたは厳密に変数をカプセル化されている外の世界へのアクセスを制御する、独自のの外の世界へのアクセスを制御することができます。