c++のオーバーライド、オーバーロード、非表示
定義#テイギ#
オーバーライド(override)
オーバーライド(override)とは、サブクラスが親クラスの虚関数を再定義することを意味します.特徴:は、それぞれ継承関係を持つサブクラスと親クラスに位置する. 親クラスの関数にはvirtualキーワードがあります. サブクラスには、その関数名と同じ、パラメータリストと同じ、戻り値と同じ関数があります.
リロード(overload)
リロード(overload)とは、同じ範囲内、同じクラス内、または同じ役割範囲内で、2つの関数は同じ関数名を有するが、異なるパラメータリストを指す.特徴:同じ作用範囲内の関数(例えば、同じクラス). 関数名は同じで、パラメータリストは異なります(これにより、コンパイラは異なる関数とみなされます).
非表示
非表示とは、子クラスの関数が親クラスの関数を非表示にする場合です.サブクラスの関数は親クラスの関数と完全に同じ(関数名が同じ、パラメータリストが同じ、戻り値が同じ)が、サブクラスの関数にはvirtualキーワードはありません. サブクラスの関数は、親クラスの関数と関数名のみが同じです.この場合の非表示は、サブクラスにvirtualキーワードがあるかどうかとは関係ありません.
例
上書き:derived::funcA(int,int)とderived::funcA(int,int,int)
リロード:virtual base::funcB(int)とderived::funcB(int)
非表示:base::funcC(int)とderived::funcC(int)base::funcA(int)とderived::funcA(int,int)
オーバーライド(override)
オーバーライド(override)とは、サブクラスが親クラスの虚関数を再定義することを意味します.特徴:
リロード(overload)
リロード(overload)とは、同じ範囲内、同じクラス内、または同じ役割範囲内で、2つの関数は同じ関数名を有するが、異なるパラメータリストを指す.特徴:
非表示
非表示とは、子クラスの関数が親クラスの関数を非表示にする場合です.
例
#include<iostream>
using namespace std;
class Base{
public:
void funcA(int n){
cout << "In base class, funcA:" << n << endl;
}
virtual void funcB(int n){
cout << "In base class, funcA:" << n << endl;
}
void funcC(int n){
cout << "In base class, funcC:" << n << endl;
}
};
class Derived: public Base{
public:
void funcC(int n){
cout << "In derived class, funcC:" << n << endl;
}
void funcA(int n1, int n2){
cout << "In derived class, funcA:" << n1 << ','<< n2 << endl;
}
void funcA(int n1, int n2, int n3){
cout << "In derived class, funcA:" << n1 << ','<< n2 << ',' << n3 << endl;
}
void funcB(int n){
cout << "In derived class, funcB:" << n << endl;
}
};
int main(){
Derived d;
d.funcC(1);
d.funcA(1, 2);
d.funcA(1, 2, 3);
d.funcB(10);
}
上書き:derived::funcA(int,int)とderived::funcA(int,int,int)
リロード:virtual base::funcB(int)とderived::funcB(int)
非表示:base::funcC(int)とderived::funcC(int)base::funcA(int)とderived::funcA(int,int)