C++第三周任务3请在原类基础上,增加成员函数,要求前三个设计成内置函数,在main()数中增加适当的调用以展示扩充类定义后的功能(最好能一次运行)。

 
【任务3】下面是已有的程序
#include <iostream>
using namespace std;
class Time
{
public:
	void set_time( );   
	void show_time( );  
private: 
	bool is_time(int, int, int);
	int hour;
	int minute;
	int sec;
};

int main( )
{
	Time t1;  
	Time &t2=t1;
	t1.set_time( );   
	t2.show_time( );
	return 0;
}

void Time::set_time( ) 
{
	char c1,c2;
	cout<<"请输入时间(格式hh:mm:ss)";
	while(1)
	{
		cin>>hour>>c1>>minute>>c2>>sec;
		if(c1!=':'||c2!=':')
			cout<<"格式不正确,请重新输入"<<endl;
		else if (!is_time(hour,minute,sec))
			cout<<"时间非法,请重新输入"<<endl;
		else 
			break;
	}
}

void Time::show_time( )      
{
	cout<<hour<<":"<<minute<<":"<<sec<<endl;
}

bool Time::is_time(int h,int m, int s)
{
	if (h<0 ||h>24 || m<0 ||m>60 || s<0 ||s>60)
		return false;
	return true;
}

要求:请在原类基础上,增加下列成员函数,要求前三个设计成内置函数,在main()数中增加适当的调用以展示扩充类定义后的功能(最好能一次运行)。add_a_sec() //增加1秒钟add_a_minute() //增加1分钟add_an_hour() //增加1小时add_seconds(int) //增加n秒钟add_minutes(int) //增加n分钟add_hours(int) //增加n小时提示:要考虑增加后超出取值范围的情形

#include <iostream>

using namespace std;
      
int sec2,minute2,hour2,sec1,minute1,hour1; 
    
class Time      
{      
public:      
        
    void set_time( );
	void show_time( ); 
	inline void add_a_sec(); //增加1秒钟 
	inline void add_a_minute(); //增加1分钟
	inline void add_an_hour(); //增加1小时
	void add_seconds(int); //增加n秒钟  
	void add_minutes(int); //增加n分钟  
	void add_hours(int); //增加n小时        
        
private:       
    bool is_time(int, int, int);      
    int hour;      
    int minute;      
    int sec;    
};      
    
    
int main( )      
{      
    Time t1;    
    t1.set_time( );         
    t1.show_time( );      
    t1.add_a_sec();  //增加1秒钟       
    cout<<"增加一秒后的时间为:";      
    t1.show_time( );      
    t1.add_a_minute(); //增加1分钟      
    cout<<"增加一分钟后的时间为:";      
    t1.show_time( );      
    t1.add_an_hour(); //增加1小时     
    cout<<"增加一小时后的时间为:";      
    t1.show_time( );      
    cout<<"您想增加多少秒钟?请输入时间:";       
    cin>>sec2;      
    t1.add_seconds(sec2); //增加n秒钟      
    cout<<"增加"<<sec2<<"秒后的时间为:";      
    t1.show_time( );      
    cout<<"您想增加多少分钟?请输入时间:";       
    cin>>minute2;       
    t1.add_minutes(minute2); //增加n分钟     
    cout<<"增加"<<minute2<<"分钟后的时间为:";      
    t1.show_time( );       
    cout<<"您想增加多少小时?请输入时间:";       
    cin>>hour2;       
    t1.add_hours(hour2); //增加n小时      
    cout<<"增加"<<hour2<<"小时后的时间为:";      
    t1.show_time( );      
    system("PAUSE");      
    return 0;      
}      
    
void Time::set_time( )       
{      
    char c1,c2;      
    cout<<"请输入时间(格式hh:mm:ss)";      
    while(1)      
    {      
        cin>>hour>>c1>>minute>>c2>>sec;      
        hour1=hour;      
        minute1=minute;      
        sec1=sec;      
        if(c1!=':'||c2!=':')      
            cout<<"格式不正确,请重新输入"<<endl;      
        else if (!is_time(hour,minute,sec))      
            cout<<"时间非法,请重新输入"<<endl;      
        else       
            break;      
    }      
}      
    
void Time::show_time( )            
{      
    cout<<hour<<":"<<minute<<":"<<sec<<endl;      
}      
    
bool Time::is_time(int h,int m, int s)      
{      
    if (h<0 ||h>24 || m<0 ||m>60 || s<0 ||s>60)      
        return false;      
    return true;      
}      
    
inline void Time::add_a_sec()  //增加1秒钟        
{    
  add_seconds(1);
	
        return;      
}      
    
inline void Time::add_a_minute() //增加1分钟        
{   
    add_minutes(1);  
        return;      
}      
    
inline void Time::add_an_hour() //增加1小时        
{      
    add_hours(1);  
    return;      
}      
    
void Time::add_seconds(int sec2)//增加n秒钟        
{       
    sec=sec1;      
    minute=minute1;      
    hour=hour1;      
    sec=sec+sec2;     
    if(sec>60)    
    {    
        sec=sec%60;    
        minute=minute+sec/60;    
    }    
    if(minute>60)    
    {     
        minute=minute%60;    
        hour=hour+minute/60;        
    }                             
    if(hour>23)    
    {    
        hour=hour-24;    
    }    
        
    return;      
} 
void Time::add_minutes(int minute2) //增加n分钟        
{     
    sec=sec1;      
    minute=minute1;      
    hour=hour1;      
    minute=minute+minute2;      
    if(minute>60)    
    {  
        minute=minute%60;    
        hour=hour+minute/60;            
    }                                 
    if(hour>23)    
    {    
        hour=hour-24;    
    }    
    return;      
}      
    
void Time::add_hours(int hour2) //增加n小时        
{      
    hour=hour1;      
    sec=sec1;      
    minute=minute1;      
    hour=hour+hour2;    
    if(hour>23)    
    {    
        hour=hour-24;    
    }    
    return;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 HoughLines 函数可以检测出图像中的直线,然后利用 line 函数在原图像上画出这些直线。 以下是示例代码: ```c++ #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main(int argc, char** argv) { // 读入图像 Mat src = imread("test.jpg", IMREAD_GRAYSCALE); if (src.empty()) { cout << "Failed to read image!" << endl; return -1; } // 边缘检测 Mat edges; Canny(src, edges, 50, 150, 3); // 霍夫变换检测直线 vector<Vec2f> lines; HoughLines(edges, lines, 1, CV_PI / 180, 200, 0, 0); // 绘制直线 Mat dst; cvtColor(edges, dst, COLOR_GRAY2BGR); for (size_t i = 0; i < lines.size(); i++) { float rho = lines[i][0], theta = lines[i][1]; Point pt1, pt2; double a = cos(theta), b = sin(theta); double x0 = a * rho, y0 = b * rho; pt1.x = cvRound(x0 + 1000 * (-b)); pt1.y = cvRound(y0 + 1000 * (a)); pt2.x = cvRound(x0 - 1000 * (-b)); pt2.y = cvRound(y0 - 1000 * (a)); line(dst, pt1, pt2, Scalar(0, 0, 255), 3, LINE_AA); } // 显示结果 imshow("src", src); imshow("dst", dst); waitKey(0); return 0; } ``` 其中,`HoughLines` 函数的参数说明如下: - `edges`:输入的边缘检测结果图像。 - `lines`:检测到的直线向量。 - `1`:表示距离分辨率,即 Hough 空间中每个格子的大小为 1 像素。一般为 1。 - `CV_PI / 180`:表示角度分辨率,即 Hough 空间中每个角度的大小为 1 度。一般为 `CV_PI / 180`。 - `200`:表示阈值,即在 Hough 空间中投票数大于等于该值的直线才会被输出。 - `0`:表示不使用累加器的置信度阈值。一般为 0。 - `0`:表示最小直线长度,一般为 0。 `line` 函数的参数说明如下: - `dst`:要画线的图像。 - `pt1`:直线的起点。 - `pt2`:直线的终点。 - `Scalar(0, 0, 255)`:直线的颜色,这里为红色。 - `3`:直线的宽度。 - `LINE_AA`:直线的类型,这里为抗锯齿。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值