클래스 2 - 클래스의const 속성

6462 단어 Const
여러분은 이런 성명을 기억하세요.
  const int rvalue=5;
1. 고정 대상
즉, rvalue는 고정되어 있으며, 그 값은 변동을 허용하지 않는다.같은 이치로 우리가 하나의 종류를 성명할 때, 대상의 데이터 구성원은 다시 변경할 수 없다는 고정된 대상이 생겨야 한다.이러한 방식으로 처리할 수 있습니다(이 섹션 CBox 클래스의 경우).
const CBox box(10,20,5);
이렇게 해서 우리는 10X20X5 사이즈의 대조가 생겼는데, 이 대상은 더 이상 변경될 수 없다.const로 성명된 대상은 바늘this도const이기 때문에 가리키는 대상은 변경할 수 없습니다.
2. 클래스의const 구성원 함수
형식은 클래스의 구성원 함수 헤더 뒤에 const를 붙이면 됩니다.
이 함수 바늘도const로 지정합니다. 함수가 정의한 내부에서 클래스의 데이터 구성원에게 값을 부여할 수 없습니다.const 구성원 함수는 현재 대상을 수정할 수 있기 때문에 같은 종류의 비const 구성원 함수를 호출할 수 없습니다.
어떤 대상이 const가 되면 그 대상이 호출하는 구성원 함수도 const일 뿐입니다. 그렇지 않으면 프로그램이 컴파일할 수 없습니다.
3. 클래스const 구성원 함수 외부 정의
 void getinfo() const ;
이상은 클래스 내부의 성명입니다. const는 반드시 함수 헤드 뒤에 있습니다.클래스의 외부에도 정의를 두려면 외부의 함수 헤더와 이 성명도 마찬가지다. 즉, 반드시 const를 가져가야 한다.
const 함수는 클래스에만 의미가 있고 일반 함수에는 아무런 의미가 없습니다.
요약:
const 클래스의 대상은 내부 데이터 구성원을 변경하지 않는 함수에만 접근할 수 있으며, 이 함수는 반드시 const입니다.
const 함수는 const 함수에만 접근할 수 있습니다
소스 코드는 다음과 같습니다.
  
#include <iostream>
using namespace std;

class CBox
{
private:
double m_long;
double m_width;
double m_height;
void printInfo() const;
public:
void getinfo() const ;
void setmember(double,double,double) ;
double readlongvalue()
{
return m_long;
}
CBox(
double lv, double wv, double hv):m_long(lv),m_width(wv),m_height(hv)
{
printf(
"Construct Created!
");
}

CBox();
};

void CBox::printInfo() const
{
printf(
"m_long=%f
m_width=%f
m_height=%f
",m_long,m_width,m_height);
}


void CBox::getinfo() const
{
printInfo();
printf(
"%f",m_height);
/*setmember(10,10,10);*/
/*printf("%f",readlongvalue());*/
}

CBox::CBox()
{
m_long
=m_width=m_height=0;
}

void CBox::setmember(double lv,double wv,double hv)
{
m_long
=lv;
m_width
=wv;
m_height
=hv;
}
void main()
{
const CBox box;
box.getinfo();
/* box.readlongvalue();*/
/* box.setmember(10,20,30);*/
}

주: 모든 취소된 부분은 정상적으로 운행할 수 없습니다.
setmember는 대상의 데이터 구성원을 바꾸기 때문에 실행할 수 없습니다.
readlongvalue는const 구성원이 아니기 때문에const 구성원 함수를 보충해서 접근할 수 없습니다.
box는 const 구성원 대상이기 때문에 비const 구성원 함수에 접근할 수 없습니다.

좋은 웹페이지 즐겨찾기