실제로는 함수 호출보다 생성자 호출과 비슷해 보이지만, 이는 객체의 생성 중에 클래스 멤버에게 값이 주어질 때 유용합니다. 제가 예를 들어주게 :
#include <iostream>
class Cool
{
public:
Cool(std::string someString, bool isCool);
~Cool();
std::string getSomeString() const;
bool isCool() const;
private:
std::string m_someString;
bool m_isCool;
};
Cool::Cool(std::string someString, bool isCool) :
m_someString(someString),
m_isCool(isCool)
{
std::cout << "constructor of Cool, members are set in initialization list\n";
}
Cool::~Cool()
{
std::cout << "destructor of Cool\n";
}
std::string Cool::getSomeString() const
{
return m_someString;
}
bool Cool::isCool() const
{
return m_isCool;
}
int main(int argc, char* argv[])
{
Cool stuff("is cool", true);
if(stuff.isCool())
{
std::cout << stuff.getSomeString();
}
return 0;
}
이 기능은 (클래스, 구조체 또는 노동 조합에 선언) 기본 유형과 자신의 종류의 차이 덜 ... 다른 만드는을,
기억) 초기화 목록이 상속 목록에서 선언 된 것과 동일한 순서로 슈퍼 생성자를 먼저 선언해야하며 멤버는 비공개로 선언 된 동일한 순서로 선언해야합니다. 예, 모든 멤버는 항상 비공개로 선언됩니다!
클래스의 메서드 이름 뒤에 지정된 키워드 const는이 메서드가 개체의 멤버를 변경하지 않을 것을 의미합니다. 이 두 메서드 중 하나라도 멤버 중 하나에 할당하면 컴파일 오류가 발생합니다. 이것은 프로그래머가 코드에서 어리석은 실수를해서는 안되며 컴파일러가 생성 된 바이너리 코드에서 멋진 빠른 것을 만들 수 있도록 실행 속도를 높입니다.
이 놀라운 언어의 특징에 대한 자세한 내용은 scott meyers의 320 페이지 짧은 책 "효과적인 C++ : 프로그램 및 디자인 개선을위한 55 가지 구체적인 방법"을 참조하십시오. 제 3 판을 읽고 있는지 확인하십시오 d (^ - ^) b
두 번째 양식을 사용하여 잡은 사람은 누구나 자루에 넣어집니다! –
MarkB가 말하듯이 함수 호출이기 때문에 함수 호출과 비슷해 보입니다. 호출되는 함수는 생성자입니다. 적어도 하나의 인수를 전달해야하며'T()'형식의 단일 인수가 될 수 없다는 점에 유의하십시오.이 인수는 다른 컨텍스트에서 기본 변수를 구성합니다. 이 규칙을 따르지 않으면 로컬 범위에서 함수 프로토 타입 (즉, 전달 선언)을 얻을 수 있습니다. 이는 프로그래머를 정말로 혼란스럽게합니다. –
잡힌 사람 ** 생성자의 초기화 목록에서 두 번째 형식을 사용하지 않음 **은 자루에 넣습니다 ... -_- '' – davogotland