final로 선언된 클래스는 더이상 상속 할 수 없다.
class A{};
class B : A {};
class C final : B {}; // final 클래스 C
class D : C {}; // 에러 C클래스는 더이상 상속할수 없다.
동일한 이름의 함수가 어떠한 영역에 선언되면 선언한 영역의 바깥영역의 함수는 은폐된다.
#include <iostream>
using namespace std;
void f(int x) {
cout << "f(int x) --> " << x << endl;
}
void f(double x) {
cout << "f(double x) --> " << x << endl;
}
int main() {
f(10);
f(20.0);
}
#include <iostream>
using namespace std;
void f(int x) {
cout << "f(int x) --> " << x << endl;
}
void f(double x) {
cout << "f(double x) --> " << x << endl;
}
int main() {
void f(int x); // 전역변수에 있는 f(int x) 함수의 원형 선언
f(10);
f(20.0); // 묵시적 형변환이 되므로 f(int x) 호출
::f(30.0); // 전역함수를 호출
}
형변환이 되지 않는 경우에는 함수 호출을 할 수 없음
include <iostream>
using namespace std;
void f(int x) {
cout << "f(int x) --> " << x << endl;
}
void f(const char* x) {
cout << "f(const char* x) --> " << x << endl;
}
int main() {
void f(int x); // 전역변수에 있는 f(int x) 함수의 원형 선언
f(10);
f("abc"); // 에러 형변환 할수 없음
::f("abc"); // 전역 함수 호출
}
#include <iostream>
using namespace std;
class A {
public:
void f(int x) {
cout << "A::f(int x) --> " << x << endl;
}
void f(const char* x) {
cout << "A::f(const char* x) --> " << x << endl;
}
};
class B : public A {
public:
void f(double x) { // A클래스의 f함수를 은폐
cout << "B::f(double x) --> " << x << endl;
}
};
int main() {
B objB;
objB.f(10.0);
objB.f(20); // 묵시적 형변환
// objB.f("dksldk"); // 에러 형변환 할 수 없음
objB.A::f(30); // A의 f함수를 명시적 호출
}