logo

C++ 클래스 및 개체

C++ 클래스 객체 지향 프로그래밍으로 이어지는 빌딩 블록입니다. 이는 해당 클래스의 인스턴스를 생성하여 액세스하고 사용할 수 있는 자체 데이터 멤버와 멤버 함수를 보유하는 사용자 정의 데이터 유형입니다. C++ 클래스는 객체의 청사진과 같습니다. 예를 들면 다음과 같은 클래스를 고려해보세요. 자동차 . 서로 다른 이름과 브랜드를 가진 많은 자동차가 있을 수 있지만 모든 자동차는 모두 공통 속성을 공유합니다. 바퀴 4개 , 속도 제한 , 마일리지 범위, etc. 따라서 여기에서는 Car가 클래스이고 바퀴, 속도 제한, 마일리지가 해당 속성입니다.

  • 클래스는 데이터 멤버와 멤버 함수를 포함하는 사용자 정의 데이터 유형입니다.
  • 데이터 멤버는 데이터 변수이고 멤버 함수는 이러한 변수를 함께 조작하는 데 사용되는 함수입니다. 이러한 데이터 멤버와 멤버 함수는 클래스에 있는 개체의 속성과 동작을 정의합니다.
  • 위의 수업 예에서 자동차 , 데이터 멤버는 속도 제한 , 사용량, 등이 있으며 멤버 기능은 다음과 같습니다. 브레이크 적용 , 속도 증가, 등.

물체 클래스의 인스턴스입니다. 클래스가 정의되면 메모리가 할당되지 않지만 인스턴스화(객체 생성)되면 메모리가 할당됩니다.



클래스 정의 및 객체 선언

클래스는 클래스 이름 뒤에 class 키워드를 사용하여 C++에서 정의됩니다. 클래스의 본문은 중괄호 안에 정의되며 끝에 세미콜론으로 종료됩니다.

C++ 클래스 및 객체

객체 선언

클래스가 정의되면 객체에 대한 사양만 정의됩니다. 메모리나 저장소가 할당되지 않습니다. 클래스에 정의된 데이터 및 액세스 함수를 사용하려면 객체를 생성해야 합니다.



통사론

ClassName ObjectName;>

데이터 멤버 및 멤버 함수에 액세스 : 객체와 함께 점('.') 연산자를 사용하여 클래스의 데이터 멤버 및 멤버 함수에 액세스할 수 있습니다. 예를 들어, 객체의 이름이 다음과 같은 경우 객체 그리고 당신은 이름으로 멤버 함수에 액세스하고 싶습니다 이름을 새기다() 그럼 당신은 작성해야합니다 obj.printName() .

데이터 멤버에 접근하기

공용 데이터 멤버도 동일한 방식으로 액세스할 수 있지만 개인 데이터 멤버는 객체에서 직접 액세스할 수 없습니다. 데이터 멤버에 대한 액세스는 해당 데이터 멤버의 액세스 제어에만 의존합니다. 이 액세스 제어는 C++의 액세스 한정자에 의해 제공됩니다. 세 가지 액세스 수정자가 있습니다. 공개, 비공개 및 보호 .

C++




비교 가능한 자바



// C++ program to demonstrate accessing of data members> #include> using> namespace> std;> class> Geeks {> >// Access specifier> public>:> >// Data Members> >string geekname;> >// Member Functions()> >void> printname() { cout <<>'Geekname is:'> << geekname; }> };> int> main()> {> >// Declare an object of class geeks> >Geeks obj1;> >// accessing data member> >obj1.geekname =>'Abhi'>;> >// accessing member function> >obj1.printname();> >return> 0;> }>

>

>

산출

Geekname is:Abhi>

클래스의 멤버 함수

멤버 함수를 정의하는 방법에는 두 가지가 있습니다.

  • 내부 클래스 정의
  • 외부 클래스 정의

클래스 정의 외부에서 멤버 함수를 정의하려면 다음을 사용해야 합니다. 범위 분석:: 연산자 클래스 이름과 함수 이름과 함께.

C++




// C++ program to demonstrate function> // declaration outside class> > #include> using> namespace> std;> class> Geeks> {> >public>:> >string geekname;> >int> id;> > >// printname is not defined inside class definition> >void> printname();> > >// printid is defined inside class definition> >void> printid()> >{> >cout <<>'Geek id is: '>< } }; // Definition of printname using scope resolution operator :: void Geeks::printname() { cout <<'Geekname is: '< } int main() { Geeks obj1; obj1.geekname = 'xyz'; obj1.id=15; // call printname() obj1.printname(); cout << endl; // call printid() obj1.printid(); return 0; }>

>

>

텍스트 크기 라텍스
산출

Geekname is: xyz Geek id is: 15>

클래스 정의 내에 정의된 모든 멤버 함수는 기본적으로 인라인 이지만 inline 키워드를 사용하여 클래스가 아닌 함수를 인라인으로 만들 수도 있습니다. 인라인 함수는 전처리기 매크로처럼 컴파일 중에 모든 곳에 복사되는 실제 함수이므로 함수 호출의 오버헤드가 줄어듭니다.

메모: 선언 친구 기능 비멤버 기능에 비공개 액세스 권한을 부여하는 방법입니다.

생성자

생성자 해당 클래스의 객체가 인스턴스화될 때마다 컴파일러에 의해 호출되는 특수 클래스 멤버입니다. 생성자는 클래스와 동일한 이름을 가지며 클래스 정의 내부 또는 외부에 정의될 수 있습니다. 생성자에는 3가지 유형이 있습니다.

C++




inurl:.git/head

// C++ program to demonstrate constructors> #include> using> namespace> std;> class> Geeks> {> >public>:> >int> id;> > >//Default Constructor> >Geeks()> >{> >cout <<>'Default Constructor called'> << endl;> >id=-1;> >}> > >//Parameterized Constructor> >Geeks(>int> x)> >{> >cout <<>'Parameterized Constructor called '><< endl;> >id=x;> >}> };> int> main() {> > >// obj1 will call Default Constructor> >Geeks obj1;> >cout <<>'Geek id is: '>< // obj2 will call Parameterized Constructor Geeks obj2(21); cout <<'Geek id is: ' < return 0; }>

>

>

산출

Default Constructor called Geek id is: -1 Parameterized Constructor called Geek id is: 21>

복사 생성자 기존 개체의 정확한 복사본인 새 개체를 만듭니다. 컴파일러는 모든 클래스에 기본 복사 생성자를 제공합니다.

통사론:

class-name (class-name &){}>

구축함

파괴자 개체의 범위가 끝날 때 컴파일러가 호출하는 또 다른 특수 멤버 함수입니다.

C++




// C++ program to explain destructors> #include> using> namespace> std;> class> Geeks> {> >public>:> >int> id;> > >//Definition for Destructor> >~Geeks()> >{> >cout <<>'Destructor called for id: '> << id < } }; int main() { Geeks obj1; obj1.id=7; int i = 0; while ( i <5 ) { Geeks obj2; obj2.id=i; i++; } // Scope for obj2 ends here return 0; } // Scope for obj1 ends here>

>

>

산출

Destructor called for id: 0 Destructor called for id: 1 Destructor called for id: 2 Destructor called for id: 3 Destructor called for id: 4 Destructor called for id: 7>

흥미로운 사실(드물게 알려진 개념)

수업이 끝날 때 세미콜론을 주는 이유는 무엇입니까?

많은 사람들은 이것이 기본 구문이고 cpp에 정의된 규칙에 따라 클래스 끝에 세미콜론을 주어야 한다고 말할 수 있습니다. 그러나 클래스 끝에 세미콜론이 있는 주된 이유는 컴파일러가 사용자가 클래스 끝에 클래스의 인스턴스를 생성하려고 하는지 확인하기 때문입니다.

예, 구조 및 공용체와 마찬가지로 마지막에 세미콜론 바로 앞에 클래스 인스턴스를 만들 수도 있습니다. 결과적으로 실행이 해당 줄에 도달하면 클래스가 생성되고 인스턴스에 메모리가 할당됩니다.

C++




자바 문자열 길이
#include> using> namespace> std;> > class> Demo{> >int> a, b;> >public>:> >Demo()>// default constructor> >{> >cout <<>'Default Constructor'> << endl;> >}> >Demo(>int> a,>int> b):a(a),b(b)>//parameterised constructor> >{> >cout <<>'parameterized constructor -values'> << a <<>' '><< b << endl;> >}> > }instance;> > > int> main() {> > >return> 0;> }>

>

>

산출

Default Constructor>

인스턴스라는 이름으로 Demo 클래스 인스턴스를 생성한 것을 볼 수 있습니다. 결과적으로 볼 수 있는 출력은 Default Constructor가 호출된다는 것입니다.

다나슈리 베르마

마찬가지로 여기에 값을 전달하여 매개변수화된 생성자를 호출할 수도 있습니다.

C++




#include> using> namespace> std;> > class> Demo{> >public>:> >int> a, b;> >Demo()> >{> >cout <<>'Default Constructor'> << endl;> >}> >Demo(>int> a,>int> b):a(a),b(b)> >{> >cout <<>'parameterized Constructor values-'> << a <<>' '><< b << endl;> >}> > > > }instance(100,200);> > > int> main() {> > >return> 0;> }>

>

>

산출

parameterized Constructor values-100 200>

따라서 세미콜론 바로 앞에 인스턴스를 생성하면 클래스의 인스턴스를 생성할 수 있습니다.

관련 기사:

  • C++의 다중 상속
  • 순수한 가상 파괴자
  • C++ 퀴즈