3个回答
展开全部
一个类就是一个扩展的struct。除了定义数据成员,你还可以为其添加成员函数。日期类的定义在文件data.h中的 Listing 1。它与上个月的C版本不同,因为在这里interval函数是一个成员函数而不是全局函数。Date::interval()的实现在 Listing 2 中。"::"叫做作用域运算符。它告诉编译器interval函数是Date类的成员函数。interval函数原型中的"&"说明这个函数的参数由应用传递(参见关于引用的选项)。Listing 3 中的程序展示了如何使用这个日期类。你必须使用结构成员的语法来调用 Date:: interval():
result = d1.interval (d2);
Date作为类型标识符,就像系统内建类型一样的发挥作用(例如,你可以定义Date的对象而不使用struct关键字)。永远也不必做如下的定义:
typedef struct Date Date;
事实上,类的概念是如此的基本,以至于C++已经将结构标签和普通的标识符结合成一个独立的名字空间。
注意我已经将isleap定义成了一个内联函数(在C版本中它是一个宏)。内联函数像宏一样将代码展开,但它也像普通函数一样进行作用阈和类型的检查。除非你要使用the stringizing or token-pasting operations of the preprocessor,,否则在C++中不需要使用 function-like 的宏。现在考虑 Listing 2 中的这个声明:
years = d2.year - year;
year指的是什么对象?在C版本中,这个声明如下:
years = d2.year - d1.year;
既然成员函数的调用总是与对象相关联(例如,d1. interval (d2)),因此当成员函数没有前缀修饰的时候,通常是相关联对象的成员(在这里,year 指的是d1.year)。this关键字代表一个指向潜在对象的指针,因此我可以做一个更加明确的声明:
years = d2.year - this->year;
但是这种用法很少。 在 Listing 4 中,我在类的定义中添加了如下的声明:
Date();
Date(int,int,int);
这是一种特殊的成员函数叫做构造函数。构造函数允许你在一个对象被创建的时候指定怎么样初始化这个对象。当你定义一个没有初始值的日期对象时,首先调用缺省构造函数(因为它没有任何参数):
Date d;
result = d1.interval (d2);
Date作为类型标识符,就像系统内建类型一样的发挥作用(例如,你可以定义Date的对象而不使用struct关键字)。永远也不必做如下的定义:
typedef struct Date Date;
事实上,类的概念是如此的基本,以至于C++已经将结构标签和普通的标识符结合成一个独立的名字空间。
注意我已经将isleap定义成了一个内联函数(在C版本中它是一个宏)。内联函数像宏一样将代码展开,但它也像普通函数一样进行作用阈和类型的检查。除非你要使用the stringizing or token-pasting operations of the preprocessor,,否则在C++中不需要使用 function-like 的宏。现在考虑 Listing 2 中的这个声明:
years = d2.year - year;
year指的是什么对象?在C版本中,这个声明如下:
years = d2.year - d1.year;
既然成员函数的调用总是与对象相关联(例如,d1. interval (d2)),因此当成员函数没有前缀修饰的时候,通常是相关联对象的成员(在这里,year 指的是d1.year)。this关键字代表一个指向潜在对象的指针,因此我可以做一个更加明确的声明:
years = d2.year - this->year;
但是这种用法很少。 在 Listing 4 中,我在类的定义中添加了如下的声明:
Date();
Date(int,int,int);
这是一种特殊的成员函数叫做构造函数。构造函数允许你在一个对象被创建的时候指定怎么样初始化这个对象。当你定义一个没有初始值的日期对象时,首先调用缺省构造函数(因为它没有任何参数):
Date d;
参考资料: http://zhidao.baidu.com/question/50484318.html?si=1
展开全部
//file
mytime.h的内容
class
mytime{
public:
mytime(int
a=2008,int
b=5,int
c=12);
~mytime();
void
show();
mytime
operator+(mytime
&);
mytime
operator-(mytime
&);
private:
int
year;
int
mon;
int
day;}
//file
mytime.cpp的内容,实现mytime类。
#include
"mytime.h"
#include
<iostream>
using
namespace
std;
mytime::mytime(int
a=2008,int
b=5,int
c=12){
year=a;mon=b;day=c;}
void
mytime::show()
{cout<<year<<"-"<<mon<<"-"<<day;}
mytime
mytime::operator
+(const
mytime
&t){
//
这个算法很头疼。
year+=t.year;mon+=t.mon;day+=t.day;
//我懒得写了,基本思路可以把月弄成的enum,然后思考闰年,思考每月天数,思考~~~~~~~~}
mytime
mytime::operator
-(const
mytime
&t){实现和+差不多}
好了。
在
//file:main.cpp
#include
"mytime.h"
##include
<iostream>
using
namespace
std;
int
main()
{
mytime
t1(2008,5,12);
mytime
t2(0,0,2);
t1.show();
t2.show();
(t1+t2).show();
(t1-t2).show();
system("PAUSE");
return
1;}
主要是运算符+,-重载。实现两个mytime类的t1+t2和t1-t2运算。
mytime.h的内容
class
mytime{
public:
mytime(int
a=2008,int
b=5,int
c=12);
~mytime();
void
show();
mytime
operator+(mytime
&);
mytime
operator-(mytime
&);
private:
int
year;
int
mon;
int
day;}
//file
mytime.cpp的内容,实现mytime类。
#include
"mytime.h"
#include
<iostream>
using
namespace
std;
mytime::mytime(int
a=2008,int
b=5,int
c=12){
year=a;mon=b;day=c;}
void
mytime::show()
{cout<<year<<"-"<<mon<<"-"<<day;}
mytime
mytime::operator
+(const
mytime
&t){
//
这个算法很头疼。
year+=t.year;mon+=t.mon;day+=t.day;
//我懒得写了,基本思路可以把月弄成的enum,然后思考闰年,思考每月天数,思考~~~~~~~~}
mytime
mytime::operator
-(const
mytime
&t){实现和+差不多}
好了。
在
//file:main.cpp
#include
"mytime.h"
##include
<iostream>
using
namespace
std;
int
main()
{
mytime
t1(2008,5,12);
mytime
t2(0,0,2);
t1.show();
t2.show();
(t1+t2).show();
(t1-t2).show();
system("PAUSE");
return
1;}
主要是运算符+,-重载。实现两个mytime类的t1+t2和t1-t2运算。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//file mytime.h的内容
class mytime{
public:
mytime(int a=2008,int b=5,int c=12);
~mytime();
void show();
mytime operator+(mytime &);
mytime operator-(mytime &);
private:
int year;
int mon;
int day;}
//file mytime.cpp的内容,实现mytime类。
#include "mytime.h"
#include <iostream>
using namespace std;
mytime::mytime(int a=2008,int b=5,int c=12){
year=a;mon=b;day=c;}
void mytime::show()
{cout<<year<<"-"<<mon<<"-"<<day;}
mytime mytime::operator +(const mytime &t){
// 这个算法很头疼。
year+=t.year;mon+=t.mon;day+=t.day;
//我懒得写了,基本思路可以把月弄成的enum,然后思考闰年,思考每月天数,思考~~~~~~~~}
mytime mytime::operator -(const mytime &t){实现和+差不多}
好了。
在
//file:main.cpp
#include "mytime.h"
##include <iostream>
using namespace std;
int main()
{
mytime t1(2008,5,12);
mytime t2(0,0,2);
t1.show();
t2.show();
(t1+t2).show();
(t1-t2).show();
system("PAUSE");
return 1;}
主要是运算符+,-重载。实现两个mytime类的t1+t2和t1-t2运算。
class mytime{
public:
mytime(int a=2008,int b=5,int c=12);
~mytime();
void show();
mytime operator+(mytime &);
mytime operator-(mytime &);
private:
int year;
int mon;
int day;}
//file mytime.cpp的内容,实现mytime类。
#include "mytime.h"
#include <iostream>
using namespace std;
mytime::mytime(int a=2008,int b=5,int c=12){
year=a;mon=b;day=c;}
void mytime::show()
{cout<<year<<"-"<<mon<<"-"<<day;}
mytime mytime::operator +(const mytime &t){
// 这个算法很头疼。
year+=t.year;mon+=t.mon;day+=t.day;
//我懒得写了,基本思路可以把月弄成的enum,然后思考闰年,思考每月天数,思考~~~~~~~~}
mytime mytime::operator -(const mytime &t){实现和+差不多}
好了。
在
//file:main.cpp
#include "mytime.h"
##include <iostream>
using namespace std;
int main()
{
mytime t1(2008,5,12);
mytime t2(0,0,2);
t1.show();
t2.show();
(t1+t2).show();
(t1-t2).show();
system("PAUSE");
return 1;}
主要是运算符+,-重载。实现两个mytime类的t1+t2和t1-t2运算。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询