static 구성원 변수와 되돌아오는 대상의 인용
4913 단어 정적 속성
#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;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PHP 정적 방법 과 정적 속성 및 상수 속성의 차이 점 및 소개프로그램 에서 왜 정적 방법 과 속성 을 사용 합 니까?그것들 은 몇 가지 특성 이 비교적 유용 하 다.실례 화 클래스 가 필요 하지 않 아 도 정적 방법 과 속성 에 접근 할 수 있 고 코드 의 어느 곳 에서 든 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.