オブジェクト指向(oo):オブジェクトは、最終的に2つの要素に分割されます。属性(クラスの特性、クラス内の変数を示す)と動作(つまり、生成するオブジェクトのアクション、およびクラス内のメソッド)です。
1カプセル化:オブジェクトのプロパティとメソッドを独立したシステムユニットに結合し、オブジェクトの内部の詳細を可能な限り非表示にすることを意味します。
2抽象化:抽象化のプロセスは、特定の問題を一般化するプロセスであり、公開されている問題のクラスを一律に記述するプロセスです。
3継承:サブクラスオブジェクトには、基本クラスと同じ属性とメソッドがすべてあります。
4多態性:サブクラスによって継承される基本クラスで定義された属性と動作を指します。これらは、異なるデータタイプまたはパフォーマンス動作を持つことができます。(あなたは同時にあなたの特徴を開発することができます)
動物は基本的なカテゴリーであり、そのサブカテゴリーはトラ、ウサギなどになります。動物として、Move()として定義された動作があり、これらのサブクラスは、継承後、それぞれの特性に応じて、さまざまなパーソナライズされたMove()メソッド(ウォーキング、フライングなど)を採用します。
配列加算C言語プログラム:
配列名は彼の最初の要素のアドレスであるため、配列とポインターにはいくつかの相関関係がありますが、完全に同等ではありません。
#include<stdio.h>
#include<iostream>
int addArray(int arr[],int n);
using namespace std;
int main()
{
int data[] = { 0,1,2,3,4,5,6,7,8,9 };
int size = sizeof(data) / sizeof(data[0]);
printf("实参数组data大小:%d\n", sizeof(data));//1输出40(是整个数组的长度)
printf("和为:%d\n", addArray(data,size));//4为什么没有当作一个数组?
//因为这里传过来他是把它当作一个地址,她不可能说把整个数组元素都传过来,这样效率太慢了。
//(因为数组是连续存放的,他不如把第一个元素的地址当作指针传过去,接着你要索引依次递推索引到你需要的元素)
//所以在3处实参传递的时候它是当指针传过来的
return 0;
}
int addArray(int arr[], int n)//3所以在整个整个函数里面所有的srr其实被当成一个指针
{
int i , sum = 0;
printf("形参数组arr大小:%d\n", sizeof(arr));//2输出8(8个字节)(是一个指针变量的长度)(是一个地址长度)(因为在64为系统里面就是8个字节存放一个地址)
for (i = 0; i < n; i++)
{
sum += arr[i];
cout << sum << endl;
}
return sum;
}
それを変更:
#include<stdio.h>
#include<iostream>
int addArray(int *arr,int n);//不定义为一个数组了直接定义为一个指针
using namespace std;//名称空间。C++标准库所使用的所有标识符(类,函数,对象等的名称都是在一个同一个特殊的名称空间(std中来定义))
int main()
{
int data[] = { 0,1,2,3,4,5,6,7,8,9 };
int size = sizeof(data) / sizeof(data[0]);
printf("和为:%d\n", addArray(data,size));//传过来传一个地址过来(因为数组名就相当于数组的首地址)
//cout<<"结果是:"<<addArray(data,size)<<endl;//endl是回车加清空缓冲区的意思
return 0;
}
int addArray(int *arr, int n)//地址传过来用一个指针接收
{
int i , sum = 0;
for (i = 0; i < n; i++)
{
sum += *arr++;//用指针来索引(arr++是地址递增,前边加*号是取值)
}
return sum;
}
結論:関数のパラメーターを配列として宣言することは、ポインターとして宣言することと同じです。
C言語はprintfを使用して出力を実現しますが、printfは関数です。
上記のC ++はcout出力を使用し、coutはオブジェクトです。Coutは、basic_ostreamクラスに属するconsole out(console output)の省略形である出力ストリームオブジェクトです。ostreamクラスは、iostreamヘッダーファイルで定義されます。(クラスは、物事のクラスをまとめてクラスを形成する抽象的なコレクションです。たとえば、人はクラス、アジア人はクラスの継承、中国人は小さなクラスです。)
ストリームオブジェクトcin、このオブジェクトのタイプはistreamであり、ユーザー端末からデータを読み取る方法を知っています。
cin >> i; // cinの場合、演算子は抽出演算子とも呼ばれ、入力ストリームオブジェクトcinから整数を抽出します。(スペースまたはEnterキーは整数と呼ばれます。)
ユーザーがキーボードを入力すると、対応する文字がオペレーティングシステムのキーボードバッファーに入力されるため、ユーザーがキーボードのEnterキーをクリックすると、オペレーティングシステムはキーボードバッファーの内容をcinストリームの内部バッファー(つまり、 stdin stream buffer)の場合、「>>」演算子はこのバッファから必要な情報を抽出します。
名前空間std; //名前空間を使用します。C ++標準ライブラリで使用されるすべての識別子(クラス、関数、オブジェクトなどの名前はすべて同じ特別な名前名(stdで定義)にあります)(すべての変数はこの名前名に含まれ、このスペースを参照する必要がありますの変数、このスペースを設定する必要があります)(そのような命令がない場合は、std :: cout構文を使用して出力ストリームオブジェクトを呼び出すことができます)
PS:オーバーロードは、古いものに新しい意味を与えることです。「>>」は元々、C ++でオーバーロードされる右シフト演算子として定義されていましたが、ここに示す方法で使用すると、入力ストリームオブジェクトから情報を抽出するために使用されます。
C言語はC ++と同じで、文字列は0で終わります。
cin.ignore(n);//忽略前n个字符;
cin.getline(buf,n);//获取输入的n个字符(字符串要包含自动后边添加的0所以是一共获取了实际的n-1个),放在buf缓冲区中。
cin.peek();//从字符里面挑取字符
cin.get();//获取字符
cin,gcount();
cin.read();
cout.write();
cout.precision();
cout.width();
--------ファイルI / O:
あるファイルを別のファイルにコピーするファイルコピープログラムを作成します。*(例:fileCopy、sourceFile、destFile)(source.cをdestFile.cにコピーするfileCopy.exeプログラムがあることを意味します)
int main(int argc,char*argv[]);
//在程序中,main有两个参数,整型变量argc和字符指针数组argv[];
//argc的含义是程序的参数数量,包含本身(就是程序自身生成的exe)。
//argv[]的每一个指针指向命令行的一个字符串,所以argv[0]指向字符串“copyFile.exe”,argv[1]指向字符串...,argv[2]指向字符串...。
//C语言版本
...
int main(int argc,char* argv)
{
FILE *in,*out;//in和out是我们声明的两个文件指针,它们的类型都是FILE*,分别u走位两个I/O流对象使用(如何理解文件指针,好端端的文件他是存放在磁盘上的,当我们要用到她的时候,必须要暂时把他们拿到内存中,拿到内存中地址是随机分配的,我们不知道地址怎么访问它,我们就必须定义两个指针(因为指针变量里边存放的就是地址),那知道了他的地址才能对他进行操作,所以我们打开之后,就是把地址传给我们定义好的文件指针in和out通过in和out这两个我们就能知道文件的地址,间接能够对文件进行操作)
int ch;
if(argc!=3)//为了确保程序参数个数的正确性
{
fprintf(stderr,"输入形式:copyFile 源文件名 目标文件名\n")//意思就是输入的参数不是三个的话,就要提示输入参数形式为....
}
if((in=fopen(argv[1],"rb"))==NULL)//以二进制可读的方式打开文件并返回文件指针给in
{
fprintf(stderr,"打不开文件:%s\n",argv[1]);//后边两个参数分别是即将被复制的文件和复制后生成的新文件名,先判断这两个文件是否可以打开或者写入
exit(EXIT_FAILURE);//终止
}
if((out=fopen(argv[2],"wb"))=NULL)//以二进制可写的方式打开文件并返回文件指针给out
{
fprintf(stderr,"打不开文件:%s\n",argv[2]);//第三个元素打不开,把这提示信息写入了错误输出流stderr,然后他会自动显示在我们的显示器上,(意思就是未能成功打开我们会像标准错误流stderr发送一条信息)
fclose(in);//因为只有上边打开了你才能执行到这一步,所以打开后要关闭
exit(EXIT_FILURE);
}
//getc()函数从一个输入流(stdin)读取一个字符,putc()函数把这个字符写入到输出流(stdout)
while((ch=getc(in))!=EOF)//EOF其实是个宏定义等于-1(文件的结尾一般都是EOF以-1标志结束)//在这里输入流是这个文件流in,获取一个字符,然后给了字符ch(上边定义的是int型为什么没有定义char呢?因为getc()函数返回值是int类型)
{//到结尾的话就不应进行循环了,因为循环体内的内容就是把这个ch写进out这个文件里面去
if(putc(ch,out)==EOF)//同时进行检查如果他是一个写入文件结尾标志的话他就进行下面语句内容break跳出循环
{
break;
}
}
//(因为上边EOF有两个意思:第一读取错误,第二是文件结束)所以下边两个语句是对文件进行检查,是哪个意思
if(ferror(in))
{
printf("读取文件 %s 失败!\n",argv[1]);
}
if(ferror(in))
{
printf("写入文件 %s 失败!\n",argv[2]);
}
printf("成功复制一个文件!\n");
fclose(in);
fclose(out);//把两个关掉
return 0;
}
C ++バージョン
#include<Fstream>//是文件流File stream
#include<iostream>//事实Fstream已经包含了iostream
using namespace std;
int main(int agc,char* argv[])
{
ifstream in("test1.txt",ios::in);
if (!in)//如果他返回0的话(就是文件打开失败),再非0就为真
{
cerr << "打开文件1失败" << endl;
return 0;
}
ifstream out("test2.txt",ios::out);
if (!out)//如果他返回0的话(就是文件打开失败),再非0就为真
{
cerr << "打开文件2失败" << endl;
return 0;
}
char x;
while (in >> x)//1">>"这里这个操作符被重载过了,它又变成流了,这种文件里面in流到了这个字符x里边去,每次流一个过去
{
out>> x;//2然后再从x流到cout这个输出终端,最后循环嘛
}
cout << endl;
in.close();//关闭
out.close();
}
#include<Fstream>//是文件流File stream
#incluede<iostream>//事实Fstream已经包含了iostream
using namespace std;
int main()
{
ifstream in;//输入文件流ifstream(input file stream)是Fstream这个头文件报刊的一个类,一个文件输入流的一个类,这个类定义了一个对象in(那么这个in就拥有了这个类的所有功能(属性和函数))。
in.open("test.txt");//in有一个函数就是open
//上边可以将两句合成一句写为:ifstream in("test.txt");//不用open直接带参数的对象
if(!in)//如果他返回0的话(就是文件打开失败),再非0就为真
{
cerr<<"打开文件失败"<<endl;
return0;
}
char x;
while(in>>x)//1">>"这里这个操作符被重载过了,它又变成流了,这种文件里面in流到了这个字符x里边去,每次流一个过去
{
cout<<x;//2然后再从x流到cout这个输出终端,最后循环嘛
}
cout<<endl;
in.close();//关闭
return 0;
}
C言語は、ポインタFILF *タイプのポインタを使用して、メモリ内のファイルのアドレスを直接指します。C++では、オブジェクトはクラスを介して渡されます。このオブジェクトは入力に特別に使用され、このオブジェクトを介してアクセスされます。このファイルを操作するためのメンバー関数アクセス。
ファイル読み取りクラス:ifstream。
ファイル書き込みクラス:ofstream。
#include<Fstream>//是文件流File stream
#incluede<iostream>//事实Fstream已经包含了iostream
using namespace std;
int main()
{
ofstream out;//类的对象和声明变量是一样的,把out改成其他也行的
out.open("test.txt");//out是指向了test.txt这个文件//打开就是把他从磁盘加载到内存
//上边可以将两句合成一句写为:ofstream out("test.txt");
if(!out)
{
cerr<<"打开文件失败"<<endl;
return0;
}
for(int i=0;i<10;i++)
{
out<<i;//利用循环把0到9,从变量i流到了out指针里面去,流到了out文件里面去(因为上边out是指向了test.txt这个文件)(怎么流呢,看他往哪指就流到哪)(如果源文件里边有东西就会被覆盖掉)
}
cout<<endl;//endl就是回车
out.close();//关闭
return 0;
}
ifstreamクラスとofstreamクラスのオブジェクトを作成するとき、上記のコードはファイルの名前をそれらのコンストラクターに渡します(当面はオブジェクトがデフォルトで使用する関数(メソッド)として理解されます)。
上記は、2つのパラメータを受け入れることもできます。
ifstream in(char* filename,int open_mode);
//第一个是指针指向了文件名(他是一个字符串)
//open_mode表示打开模式,气质用来定义怎么的反射光hi打开文件(跟open的参数一样)
模式见下图
(什么是文本形式,什么是二进制形式?没有翻译为一堆数据那他就是文本形式)
画像:
例:
#include<Fstream>
#incluede<iostream>
using namespace std;
int main()
{
ofstream out("test.txt",ios:app);//就是以添加的形式打开
if(!out)
{
cerr<<"打开文件失败"<<endl;
return0;
}
for(int i=0;i<10;i++)
{
out<<i;
}
cout<<endl;//endl就是回车
out.close();//关闭
return 0;
}
複数のモードで開く:(OR演算子を使用: "|")
#include<fstream>
#include<iostream>
using namespace std;
int main()
{
fatream fp("test.txt",ios::in|ios::out);//对象命名为fp//同时以可读和可写入形式打开
if(!fp)
{
cerr<<"打开文件失败!"<<endl;
}
fp<<"I LOVE";//将这些字符"I LOVE"流进去fp
//上边的内容是把字符串流入了我们的文件中
//下边是通过str显示
static char str[10];//静态的数组,为了定义他不能够被改变。
fp.seekg(ios::beg);//ios::beg使得文件指针指向文件头;ios::end就是文件尾。
fp>>str;//把fp的内容给了数组
cout<<str<<endl;//把数组显示
fp.close();
return 0;
}
0x1 | 0x2 = 11は、主にこのビットに数値があるかどうかに依存します。数値がある場合は、対応するモードになります。