#include "stdafx.h"
#include <iostream>
#include <string>
#include <stdlib.h>
#include<cstdlib>
using namespace std;
class Date
{
public:
Date();//构造函数
Date(const Date&);//拷贝构造函数
Date strToDate(string);//将string转化为Date
void setDate(string);//设置日期
void printDate();//打印日期
private:
int year;
int month;
int day;
bool pass;
bool checkFormat(string);//验证日期输入格式
void validate();//验证日期数值有效性
bool leapYear(int);//闰年判断
};
class A
{
private:
int age;
public:
int get_age();
void set_age();
};
int A::get_age()
{
age = 28;
return age;
}
void A::set_age()
{
age = 100;
}
Date::Date()
{
year = 2006;
month = day = 1;
validate();
}
Date::Date(const Date& date)
{
year = date.year;
month = date.month;
day = date.day;
pass = date.pass;
}
Date Date::strToDate(string ds)
{
// yyyy:mm:dd
Date d;
d.setDate(ds);
return d;
}
void Date::setDate(string ds)
{
if( !checkFormat(ds) )
{
cout << "日期格式错误" << endl;
pass = false;
return;
}
validate();
if(pass)
{
year = atoi(ds.substr(0, 4).c_str());
month = atoi(ds.substr(5, 2).c_str());
day = atoi(ds.substr(8, 2).c_str());
}
}
void Date::printDate()
{
if (pass)
{
cout << year << "年"
<< month << "月"
<< day << "日" << endl;
}
else
{
cout << "日期错误" << endl;
}
}
void Date::validate()
{
pass = false;
if (year < 1900 || month < 1 || month > 12 || day < 1 || day > 31)
{
return;
}
if (month == 2)
{
if (leapYear(year))
{
if (day <= 29)
{
pass = true;
}
return;
}
else
{
if (day <= 28)
{
pass = true;
}
return;
}
}
else if (month == 4 || month == 6 || month == 9 || month == 11)
{
if (month <= 30)
{
pass = true;
}
return;
}
else
pass = true;
}
bool Date::leapYear(int year)
{
if (year % 100 == 0)
{
if (year % 400 == 0)
{
return true;
}
}
else
{
if ((year % 4) == 0)
{
return true;
}
}
return false;
}
bool Date::checkFormat(string ds)
{
//yyyy:mm:dd
if (ds.length() != 10
|| ds[4] != ':'
|| ds[7] != ':')
{
return false;
}
for (int i = 0; i < (int)ds.length(); i++ )
{
if( i != 4 && i != 7)
{
if (ds[i] < '0' || ds[i] > '9')
{
return false;
}
}
}
return true;
}
int _tmain(int argc, _TCHAR* argv[])
{
// 测试是否能正确设置日期
string str;
cout << "--TEST:请输入一个日期<yyyy:mm:dd>:" << endl;
cin >> str;
Date d;
d.setDate(str);
d.printDate();
//测试拷贝构造函数
cout << "--TEST:调用拷贝构造函数" << endl;
Date dc = d;
dc.printDate();
//测试字符串到日期转换的函数
cout << "--TEST:将字符串’2012:03:28‘转化为Date类型并输入" << endl;
Date dt = d.strToDate("2012:03:28");
dt.printDate();
A a;
a.set_age();
cout<<"您目前的年龄是:";
cout<<a.get_age();
system("pause");
return 0;
}
分享到:
相关推荐
不能把类中的全部成员与外界隔离,一般是把数据隐蔽起来,而把成员函数作为对外界的接口。 三、成员访问限定符 在类的声明中,可以使用成员访问限定符(member access specifier)来指定成员的访问权限。私有的...
本教程将深入探讨C++中简单类的声明与使用,帮助你理解类的基本组成结构及其用法。 一、类的定义 类是一种自定义的数据类型,它封装了数据(成员变量)和操作这些数据的函数(成员函数)。在C++中,我们可以使用`...
这是管理C++类的定义域使用的概略,里面比较详细的介绍了类的想换内容,适合初学者
在编程世界中,C语言和C++是两种广泛使用的编程语言。C++是对C语言的扩展,增加了面向对象编程的支持,而C语言则以其高效、简洁和底层控制能力著称。有时,我们可能需要在C语言项目中调用C++编写的类和方法,这种...
1.自定义分数类fraction,使用该类可以完成分数的输入、分数的加、减、乘、除二目运算和一目减运算、分数的约分操作、分数的倒数运算、对两个分数进行六种比较运算、以及对分数的... 定义类,运算符重载、类型转换。
1. 前置声明:在类A中使用类B的成员之前,我们需要告诉编译器类B的存在。这可以通过前置声明来实现: ```cpp class B; //前置声明 class A { B* b_ptr; // A中使用B的指针 }; ``` 2. 循环包含:如果类A包含类B的...
定义一个Book(图书)类,在该类定义中包括: (1) 数据成员:bookname(书名)、price(价格) 和number(存书数量)。 (2) 成员函数:display()显示图书的情况;borrow()将存书数量减1。并显示当前存书数量;restore( )...
zfind是本人写的一个简单的C/C++宏定义和类定义搜索工具,z是左的意思,即本人姓氏。取此名字是因为windows下有find命令,为避免冲突。另外本工具是本人在32位WIN7环境下使用的,其余环境本人不保证兼容。 写此工具...
c++ 基础 类外定义函数 调用函数 基础
此外,如果C++类中有虚函数,还需要考虑多态性的问题,可能需要设计更复杂的接口。 总结来说,C#调用C++DLL中的类主要涉及以下几个步骤: 1. 在C++DLL中定义导出类及其方法。 2. 在C#中使用DllImport加载DLL,并...
在C++编程语言中,复数(Complex Number)是一种数据结构,用于表示具有实部和虚部的数学复数。为了处理复数,C++标准库提供了一个名为`<complex>`的头文件,该文件定义了一个`std::complex`类模板,我们可以利用这...
8. **在DevC++中使用模板类** - 在DevC++这样的集成开发环境中,创建并使用模板类的过程与其他IDE类似。首先,新建一个C++项目,然后在源代码文件中编写模板类的定义。接着,在主程序中实例化模板类,并调用其成员...
本实验报告主要介绍了C++类的定义与使用,通过编写一个简单的成绩管理系统,来演示类的概念、定义方式和封装等。下面是本实验报告的详细知识点总结: 一、类的概念 在C++中,类是用户定义的数据类型,用于描述一组...
例如,如果我们定义了一个`Student`类,其中包含姓名和年龄,我们可以基于年龄定义等价类,使得所有年龄相同的`Student`对象都在同一个等价类中。 为了方便操作等价类,我们可以创建一个`EquivalenceClass`类,它...
如果要在 QML使用 C++中定义的类型,有些数据类型是是可以直接使用的,如常见的 int,但是还有一些相对特殊的类型就需要做些特定的操作才可以使用了。 博客地址:...
实验二C++函数的定义与使用的目的是学习函数的定义、函数的使用和函数重载,掌握函数的声明、定义和使用,理解函数参数的传递和C++系统函数的调用。 实验设备包括计算机、Windows操作系统和VC++6。 实验内容和步骤...
标题中的"c++与PLC通讯,自定义类封装",意味着这个项目或教程中,开发者通过C++编写了程序来与PLC进行通讯,并且使用了面向对象编程中的类来封装相关的功能。这通常包括建立通讯协议、数据包解析和发送、错误处理等...
13. 函数隐藏:如果派生类中定义了与基类同名但参数列表不同的函数,基类的同名函数在派生类中被“隐藏”,这意味着在派生类中直接调用该函数时,不会调用基类的版本,除非使用作用域解析运算符`::`显式指定。...
在这个主题中,我们将深入探讨类与对象的概念、它们的作用以及如何在实际编程中使用它们。 类是C++中的一个关键构造,可以看作是创建对象的蓝图或模板。它定义了一组属性(数据成员)和行为(成员函数),这些属性...
确保在类定义和成员函数声明中使用了适当的导出关键字。 4. **控制台程序调用DLL**: 创建一个独立的控制台应用程序项目,用于调用DLL中的类。首先,需要包含DLL的头文件,并使用`__declspec(dllimport)`关键字...