C ++ - 객체 지향 (IX)

면책 조항 :이 문서는 블로거 원본입니다, 추적 에 의해-SA의 CC 4.0 저작권 계약, 복제, 원본 소스 링크이 문을 첨부 해주세요.
이 링크 : https://blog.csdn.net/weixin_42528266/article/details/102756467
친구
  • 친구 클래스를 포함하여 친구 및 친구 기능
  • 함수 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

추천

출처blog.csdn.net/weixin_42528266/article/details/102756467