면책 조항 :이 문서는 블로거 원본입니다, 추적 에 의해-SA의 CC 4.0 저작권 계약, 복제, 원본 소스 링크이 문을 첨부 해주세요.
친구
- 친구 클래스를 포함하여 친구 및 친구 기능
- 함수 A (비 멤버 함수) 친구 기능의 클래스 C로 선언 된 경우, 함수 A는 직접 클래스 C 객체의 멤버에 액세스 할 수 있습니다
- 클래스가 친구 클래스 C 클래스로 선언되면, 그래서 클래스 A 기능의 모든 멤버는 클래스 C 객체의 모든 멤버에 직접 액세스 할 수
- 친구는 객체 지향의 캡슐화를 위반 있지만, 일부 장소에서 자주 방문하는 멤버 변수는 성능을 향상시킬 수 있습니다
#include <iostream>
using namespace std;
class Point {
// friend Point add(const Point &, const Point &);
friend class Math;
private:
int m_x;
int m_y;
public:
int getX() const { return this->m_x; };
int getY() const { return this->m_y; };
Point(int x, int y) :m_x(x), m_y(y) { }
};
class Math {
public:
Point add(const Point &point1, const Point &point2) {
return Point(point1.m_x + point2.m_x, point1.m_y + point2.m_y);
}
};
//Point add(const Point &point1, const Point &point2) {
// return Point(point1.m_x + point2.m_x, point1.m_y + point2.m_y);
//}
int main() {
Point point1(10, 20);
Point point2(20, 30);
Point point = add(point1, point2);
cout << endl;
getchar();
return 0;
}
내부 클래스
- 클래스 A가 클래스 C에 정의되는 경우, 클래스는 클래스 내부 (내부 클래스) 인
- 내부 클래스 특징
- 공공, 보호, 개인의 권리를 지원
- 그 기능의 모든 구성원이 클래스 객체 외부에서 직접 액세스 할 수 있습니다 (반대의 경우도 마찬가지)
- 멤버 함수는 직접 클래스 이름없이, 개체 이름은 외부 클래스의 정적 멤버에 액세스 할 수
- 그것은 외부 클래스의 메모리 레이아웃에 영향을 미치지 않습니다
- 내부 클래스 선언 외부에서 외부 클래스의 외부에서 정의 할 수 있습니다
#include <iostream>
using namespace std;
// Person
class Person {
private:
static int ms_legs;
static void other() {
}
int m_age;
void walk() {
}
// Car
class Car {
int m_price;
public:
Car() {
cout << "Car()" << endl;
}
void run() {
Person person;
person.m_age = 10;
person.walk();
ms_legs = 10;
other();
}
};
public:
Person() {
cout << "Person()" << endl;
Car car;
}
};
int Person::ms_legs = 2;
class Point {
class Math {
void test();
};
};
void Point::Math::test() {
}
int main() {
cout << sizeof(Person) << endl;
Person person;
Person::Car car;
getchar();
return 0;
}
현지 클래스
- 내부에 정의 된 함수의 클래스에서 로컬 클래스라고
- 지역 클래스 특징
- 범위는 내부 상주 기능에 한정되고
- 모든 회원은 클래스 내에서 정의되어야하며, 정적 멤버 변수의 정의를 허용하지 않습니다
- 로컬 변수의 멤버 함수는 직접 (정적 변수 제외) 기능에 액세스 할 수없는
#include <iostream>
using namespace std;
int g_age = 20;
void test() {
int age = 10;
static int s_age = 30;
// 局部类
class Person {
public:
static void run() {
g_age = 30;
s_age = 40;
cout << "run()" << endl;
}
};
Person person;
Person::run();
}
int main() {
test();
getchar();
return 0;
}
타입 변환
- C ++은 C ++ 스타일의 캐스팅 대체 C 스타일 캐스트를 사용하여 제안
- C ++는 변환 지정자의 네 가지 유형이 있습니다 : static_cast, dynamic_cast는, reinterpret_cast,에 const_cast