C ++での関数のオーバーロードと関数のオーバーライドを区別しますか?
11 に答える
C++ でのメソッド (または関数) のオーバーロードは、これらのメソッドが異なるシグネチャ (異なるパラメーターのセット) を持っている限り、同じ名前の関数を定義できる機能です。メソッドのオーバーライドは、継承されたクラスが基本クラスの仮想メソッドを書き換える機能です。
a) オーバーロードでは、同じクラスで使用可能なメソッド間に関係がありますが、オーバーライドでは、スーパークラス メソッドとサブクラス メソッドの間に関係があります。
(b) オーバーロードはスーパークラスからの継承をブロックしませんが、オーバーライドはスーパークラスからの継承をブロックします。
(c) オーバーロードでは、別々のメソッドが同じ名前を共有しますが、オーバーライドでは、サブクラス メソッドがスーパークラスを置き換えます。
(d) オーバーロードには異なるメソッド シグネチャが必要ですが、オーバーライドには同じシグネチャが必要です。
関数のオーバーロードは、同じ関数に異なるパラメーターを持たせたい場合に行われます
void Print(string s);//Print string
void Print(int i);//Print integer
関数のオーバーライドは、基本クラスの関数に別の意味を与えるために行われます
class Stream//A stream of bytes
{
public virtual void Read();//read bytes
}
class FileStream:Stream//derived class
{
public override void Read();//read bytes from a file
}
class NetworkStream:Stream//derived class
{
public override void Read();//read bytes from a network
}
メソッドのシグネチャの引数の元の型を変更すると、オーバーロードが発生します。
派生クラスのメソッドの元の実装を変更すると、オーバーライドが行われます。
オーバーライドとは、同じパラメーターを持つ既存の関数の異なる定義を与えることを意味し、オーバーロードとは、異なるパラメーターを持つ既存の関数の異なる定義を追加することを意味します。
例:
#include <iostream>
class base{
public:
//this needs to be virtual to be overridden in derived class
virtual void show(){std::cout<<"I am base";}
//this is overloaded function of the previous one
void show(int x){std::cout<<"\nI am overloaded";}
};
class derived:public base{
public:
//the base version of this function is being overridden
void show(){std::cout<<"I am derived (overridden)";}
};
int main(){
base* b;
derived d;
b=&d;
b->show(); //this will call the derived overriden version
b->show(6); // this will call the base overloaded function
}
出力:
I am derived (overridden)
I am overloaded
1.関数のオーバーロードとは、クラス内に同名の関数が複数存在することです。関数のオーバーライドは、関数が基本クラスと派生クラスで同じプロトタイプを持つ場合です。
2.関数のオーバーロードは、継承なしで発生する可能性があります。関数のオーバーライドは、あるクラスが別のクラスから継承されるときに発生します。
3.オーバーロードされた関数は、パラメーターの数またはパラメーターのタイプが異なる必要があります。オーバーライドされた関数のパラメーターは同じでなければなりません。
詳細については、C ++での関数のオーバーロードとオーバーライドに関する詳細情報を入手できる以下のリンクに アクセスしてください https://googleweblight.com/i?u=https://www.geeksforgeeks.org/function-overloading-vs-function-上書き-cpp/&hl=en-IN
関数のオーバーロードは同じ名前の関数ですが、引数が異なります。関数のオーバーライドは、同じ名前の関数と引数と同じことを意味します
Function overloading
- 同じ名前の関数ですが、引数の数が異なります
Function overriding
- 継承の概念。同じ名前で同じ数の引数を持つ関数。ここでは、2 番目の関数が最初の関数をオーバーライドしたと言われています。