홈>
아래 표시된 코드를 모두 고려하십시오. 하나는 생성자를 사용하여 값을 초기화하고 다른 하나는 생성하지 않습니다.
코드 # 1
#include<iostream>
using namespace std;
class Rectangle
{
public:
int width;
int height;
};
int main()
{
Rectangle rect1{3,4};
cout<<"Width="<<rect1.width<<endl;
cout<<"Height="<<rect1.height<<endl;
return 0;
}
출력을 다음과 같이 얻는다
폭 = 3
높이 = 4
코드 # 2
#include<iostream>
using namespace std;
class Rectangle
{
public:
int width;
int height;
Rectangle(int a,int b)
{
width=a;
height=b;
}
};
int main()
{
Rectangle rect1(3,4);
cout<<"Width="<<rect1.width<<endl;
cout<<"Height="<<rect1.height<<endl;
return 0;
}
같은 결과를 얻습니다. 내 질문은 간단 할 수 있지만 두 경우 모두 동일한 출력을 얻을 때 생성자를 사용하는 것이 왜 귀찮습니까? 미리 감사드립니다
- 답변 # 1
- 답변 # 2
간단한 데이터 유형의 경우에는 문제가되지 않지만, 유용하지 않은 초기화를 필요로하거나 심지어 초기화해야하는 평범하지 않은 데이터 유형이 많이 있습니다.
- 답변 # 3
생성자에게는 몇 가지 이점이 있습니다.
생성자는 퍼블릭 API (캡슐화)를 허용합니다. 더 복잡한 클래스에서는 호출자가 건드리지 않아야하는 내부 데이터를 초기화해야 할 수 있습니다.
initializing
DefaultConstructible 및 CopyConstructible과 같은 생성자와 관련된 몇 가지 C ++ 개념이 있습니다. 생성자는 일반적인 인터페이스를 제공하므로 일반 코드는 다른 유형의 객체를 균일 한 방식으로 인스턴스화 할 수 있습니다.
#include<iostream> using namespace std; class Sample { private: const int num; public: Sample( int i):num(i){} int getVal() { return num; } }; int main() { Sample s(12); cout<<s.getVal(); }
class Foo { public: Foo(int x) { internal_data1 = some_computation1(x); internal_data2 = some_computation2(x); } Some_Type3 some_method(int x) { return some_computation3(x, this->internal_data1, this->internal_data2); } private: Some_Type1 internal_data1; Some_Type2 internal_data2; };
관련 자료
- sql - 너무 많은 논리 연산자를 사용하지 않고 하나의 쿼리에서 postgreSQL 배열의 모든 값을 삭제할 수 있습니까?
- inheritance - C #에서 기본 클래스를 초기화하지 않고 자식 클래스를 초기화하는 방법
- tsql - 마지막 값 (SQL)을 포함하지 않고 값의 평균을 계산하는 방법은 무엇입니까?
- javascript - 커밋하지 않고 업데이트되는 Vuex 스토어 값
- c++ - 선언 된 값보다 적은 값으로 int 배열을 초기화하면 값으로 0 만 추가됩니까?
- xml - xmlstarlet을 통해 탐색하지 않고 특정 노드 값을 추출하는 방법
- java - CRUD 작업 생성을 수행하지 않고 Hibernate를 사용하여 MS SQL에서 값 검색
- r - 루프 또는 적용 함수를 사용하지 않고 다른 행렬을 기반으로 행렬 값 수정
- sql - 값을 세고 빈 값없이 그룹화
- tsql - T-SQL에서 VALUES 키워드를 사용하지 않고 테이블에 행을 만드는 방법
트렌드
- OpenCv의 폴더에서 여러 이미지 읽기 (python)
- 파이썬 셀레늄 모든 "href"속성 가져 오기
- html - 자바 스크립트 - 클릭 후 변경 버튼 텍스트 변경
- javascript - 현재 URL에서 특정 div 만 새로 고침/새로 고침
- JSP에 대한 클래스를 컴파일 할 수 없습니다
- JavaScript 변수를 HTML div에 '출력'하는 방법
- git commit - 자식 - 로컬 커밋 된 파일에 대한 변경을 취소하는 방법
- jquery - JavaScript로 현재 세션 값을 얻으시겠습니까?
- javascript - swiperjs에서 정지, 재생 버튼 추가
- python - 화면에서 찾은 요소를 찾을 수없는 경우 셀레늄
대답은 아주 간단하고, 생성자 초기화, 다른 방법 할당.
차이점은 크게 보이지는 않지만이 코드를 고려하십시오.
이 코드는num
라는 컴파일 오류를 발생시킵니다 const로 선언되었으며num
에 값을 할당하려고합니다.i
와 동일하게함으로써 .와이즈 비즈 때문에 그리고
const
references
여야합니다initialized
직후 와이즈 비즈declaration
의이 작업 수행 그들.또한, 반원들을 사적으로 만드십시오. 좋은 습관이고 훨씬 더 객체 지향적입니다.
위 코드는