static 구성원 변수와 되돌아오는 대상의 인용

4913 단어 정적 속성
(1)static 수식 클래스 구성원 변수(속성)로 이 변수는 정적임을 나타낸다. 얼마나 많은 대상을 만들든지 간에 정적 속성 복사본, 즉 대상들이 같은 정적 속성을 공유하는 것만 만든다. 이 방법은 프로그램이 이 클래스를 몇 번이나 호출했는지 계산하는 데 사용된다. 즉, 얼마나 많은 대상을 만들었는지.
#ifndef TIME_H_
#define TIME_H_

#include <iostream>
using namespace std;

class Time
{
private:
	int hours;
	int minutes;
	int seconds;
	static int count;
public:
	Time();
	Time(int h = 0, int m = 0, int s = 0);
……
#include "Time.h"
#include <cstdlib>// abort() 

int Time::count = 0;// static

Time::Time()
{
	hours = minutes = seconds = 0;
	count++;
}

Time::Time(int h, int m, int s)
{
	if (h < 0 || h > 24 || m > 60 || m < 0 || s > 60 || s < 0)
	{
		cout << " , !" << endl;
		abort();
	}
	hours = h;
	minutes = m;
	seconds = s;
	count++;
}

또한 성형/매거형const의 정적 속성이 아니면 파일(.cpp)에서 초기화해야 하고 초기화할 때 다른 구성원 함수와 독립해야 한다. 즉, 구조 함수에서 정적 속성을 초기화할 수 없다.
int Time::count = 0;// static

성형/매거형const의 정적 속성만 가능하고 성명 파일(.h)에서 초기화되어야 하며 성명에서 초기화된 성형/매거형static 속성은 반드시 const 형식으로 성명해야 한다.
(2) 동시에 여기에'귀환 대상의 인용'이라는 방법을 말하고,
Time Time::max(const Time &t1, const Time &t2)
{
	return t1;
}

이런 반환 방법은 t1 대상의 복사본 (복제 구조 함수 호출) 을 만들어야 하기 때문에 효율이 비교적 낮다.다음 방법은 다음과 같습니다.
const Time& Time::max(const Time &t1, const Time &t2)
{
	return t1;
}

대상 t1의 인용 (별명) 을 되돌려줍니다. 효율이 높습니다. 또한 t1은 매개 변수에서const 형식으로 성명되어 있기 때문에, 되돌려주는 값도const로 성명해야 합니다. (여기의const는 내가 당신에게 되돌려준 물건을 수정할 수 없음을 표시합니다.) 그렇지 않으면 오류가 발생합니다.
(3) 마지막으로 작은 지식을 하나 더 말씀드리자면 new 키워드로 클래스를 만드는 대상입니다.
Time *a = new TIme();

이 말 뒤에 코디를 해야 돼요.
4
delete a;
계족함수 자동 delete가 아닌 사용을 진행한다.
이 지식은 C++ primer plus (6판 중국어 버전) 12.5.1절에서 인용했습니다.
Time.h:
#pragma once
/*
* Time.h
*
*  Created on: 2016-4-16
*      Author: lvlang
*/

#ifndef TIME_H_
#define TIME_H_

#include <iostream>
using namespace std;

class Time
{
private:
	int hours;
	int minutes;
	int seconds;
	static int count;
public:
	Time();
	Time(int h = 0, int m = 0, int s = 0);// 0
	void AddHr(int h);
	void AddMin(int m);
	void reset(int h = 0, int m = 0, int s = 0);
	void show()const;//const 
	Time sum(const Time &t)const; // 
	Time operator+(const Time &t)const;
	const Time &max(const Time &t1, const Time &t2);
	~Time();
};


#endif /* TIME_H_ */

Time.cpp:
/*
* Time.cpp
*
*  Created on: 2016-4-16
*      Author: lvlang
*/

#include "Time.h"
#include <cstdlib>// abort() 

int Time::count = 0;

Time::Time()
{
	hours = minutes = seconds = 0;
	count++;
}

Time::Time(int h, int m, int s)
{
	if (h < 0 || h > 24 || m > 60 || m < 0 || s > 60 || s < 0)
	{
		cout << " , !" << endl;
		abort();
	}
	hours = h;
	minutes = m;
	seconds = s;
	count++;
}

void Time::AddHr(int h)
{
	hours = (hours + h) % 24;
}

void Time::AddMin(int m)
{
	int temp = this->minutes + m;
	this->hours += temp / 60;
	this->minutes = temp % 60;
}

void Time::reset(int h, int m, int s)
{
	if (h < 0 || h > 24 || m > 60 || m < 0 || s > 60 || s < 0)
	{
		cout << " , !" << endl;
		abort();
	}
	this->hours = h;
	this->minutes = m;
	this->seconds = s;
}

void Time::show()const
{
	cout << "Hours: " << this->hours << " Minutes: " << this->minutes 
		<< " Seconds: " << this->seconds <<" Count: "<<count<< endl;
}
Time Time::sum(const Time &t)const
{
	Time temp(0,0,0);
	int ts = (this->seconds + t.seconds) / 60;
	temp.seconds = (this->seconds + t.seconds) % 60;
	temp.minutes = (this->minutes + t.minutes + ts) % 60;
	int tm = (this->minutes + t.minutes + ts) / 60;
	temp.hours = (this->hours + t.hours + tm) % 24;
	return temp;
	//return *this;// (this )
}
Time Time::operator+(const Time &t)const
{
	Time temp(0,0,0);
	int ts = (this->seconds + t.seconds) / 60;
	temp.seconds = (this->seconds + t.seconds) % 60;
	temp.minutes = (this->minutes + t.minutes + ts) % 60;
	int tm = (this->minutes + t.minutes + ts) / 60;
	temp.hours = (this->hours + t.hours + tm) % 24;
	return temp;//return temp 
}

const Time& Time::max(const Time &t1, const Time &t2)
{
	return t1;
}

Time::~Time()
{
	cout << " " << endl;
}

main.cpp
#include "Time.h"

int main()
{
	Time time(10,10,10);
	time.show();
	time.AddHr(2);
	time.show();
	time.AddMin(20);
	time.show();
	Time t(1, 1, 1);
	t.show();
	t.reset(9, 9, 9);
	t.sum(time);
	t.show();
	
	/*t = t + time;
	t.show();*/

	return 0;
}

좋은 웹페이지 즐겨찾기