-
C++教程之类的引用
类的引用
在函数参数和返回值中,如果一定要使用传值方式,那么使用类对象的引用,是一个提高效率的方法。
类的数据成员也可以是一个引用,但必须注意:第一,一个引用必须初始化。通常一个类对象并不会像结构那样用大括号来初始化,而是调用构造函数。因此在构造函数里必须初始化类当中的引用成员。第二,引用是一个别名。尽管类里面的引用在使用方式上看起来和类的一般数据成员没有什么区别,但是作用在其上的操作,实际上是对用来初始化它的那么对象进行的。
#include iostream.h
class Date
{
int da, mo, yr;
public:
Date(int d,int m,int y)
{ da = d; mo = m; yr = y; }
void Display() const
{ cout << da << '/' << mo << '/' << yr; }
};
class Time
{
int hr, min, sec;
public:
Time(int h, int m, int s)
{ hr = h; min = m; sec = s; }
void Display() const
{ cout << hr << ':' << min << ':' << sec; }
};
class DateTime
{
const Date& dt;
const Time& tm;
public:
DateTime(const Date& d, const Time& t) : dt(d), tm(t)
{
//empty
}
void Display() const
{
dt.Display();
cout << ' ';
tm.Display();
}
};
int main()
{
Date today(7,4,2004);
Time now(15,20,0);
DateTime dtm(today, now);
dtm.Display();
return 0;
}
我们来看看这个程序中DateTime的构造函数的格式:冒号操作符引出了一个参数初始化表。必须使用这种格式来初始化引用数据成员,而不可以在函数体内来进行初始化工作。如果构造函数像上例一样不是内联的,那么最好不要在类声明中构造函数的原型上使用冒号和初始化值表,而是像下面这样,把参数初始化表放在定义构造函数的地方:
Class DateTime
{
const Date& dt;
const Time& tm;
public:
DateTime(const Date& d,const Time& t);
}
DateTime::DateTime(const Date& d,const Time& t):dt(d),tm(t)
{
//empty
}
可以使用构造函数的参数初始化表来初始化任何数据成员。特别是常量数据成员,和引用一样,只能在参数初始化表里进行初始化,这是因为不可以在构造函数内部为常量数据成员赋值。
当一个类含有引用数据成员时,一旦引用被实例化和初始化以后,就无法修改它的值,所以该类不可能彻底地重载赋值运算符函数。
在函数参数和返回值中,如果一定要使用传值方式,那么使用类对象的引用,是一个提高效率的方法。
类的数据成员也可以是一个引用,但必须注意:第一,一个引用必须初始化。通常一个类对象并不会像结构那样用大括号来初始化,而是调用构造函数。因此在构造函数里必须初始化类当中的引用成员。第二,引用是一个别名。尽管类里面的引用在使用方式上看起来和类的一般数据成员没有什么区别,但是作用在其上的操作,实际上是对用来初始化它的那么对象进行的。
#include iostream.h
class Date
{
int da, mo, yr;
public:
Date(int d,int m,int y)
{ da = d; mo = m; yr = y; }
void Display() const
{ cout << da << '/' << mo << '/' << yr; }
};
class Time
{
int hr, min, sec;
public:
Time(int h, int m, int s)
{ hr = h; min = m; sec = s; }
void Display() const
{ cout << hr << ':' << min << ':' << sec; }
};
class DateTime
{
const Date& dt;
const Time& tm;
public:
DateTime(const Date& d, const Time& t) : dt(d), tm(t)
{
//empty
}
void Display() const
{
dt.Display();
cout << ' ';
tm.Display();
}
};
int main()
{
Date today(7,4,2004);
Time now(15,20,0);
DateTime dtm(today, now);
dtm.Display();
return 0;
}
我们来看看这个程序中DateTime的构造函数的格式:冒号操作符引出了一个参数初始化表。必须使用这种格式来初始化引用数据成员,而不可以在函数体内来进行初始化工作。如果构造函数像上例一样不是内联的,那么最好不要在类声明中构造函数的原型上使用冒号和初始化值表,而是像下面这样,把参数初始化表放在定义构造函数的地方:
Class DateTime
{
const Date& dt;
const Time& tm;
public:
DateTime(const Date& d,const Time& t);
}
DateTime::DateTime(const Date& d,const Time& t):dt(d),tm(t)
{
//empty
}
可以使用构造函数的参数初始化表来初始化任何数据成员。特别是常量数据成员,和引用一样,只能在参数初始化表里进行初始化,这是因为不可以在构造函数内部为常量数据成员赋值。
当一个类含有引用数据成员时,一旦引用被实例化和初始化以后,就无法修改它的值,所以该类不可能彻底地重载赋值运算符函数。
最新更新
Objective-C语法之代码块(block)的使用
VB.NET eBook
Add-in and Automation Development In VB.NET 2003 (F
Add-in and Automation Development In VB.NET 2003 (8
Add-in and Automation Development in VB.NET 2003 (6
Add-in and Automation Development In VB.NET 2003 (5
AddIn Automation Development In VB.NET 2003 (4)
AddIn And Automation Development In VB.NET 2003 (2)
Addin and Automation Development In VB.NET 2003 (3)
AddIn And Automation Development In VB.NET 2003 (1)
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
武装你的WEBAPI-OData入门
武装你的WEBAPI-OData便捷查询
武装你的WEBAPI-OData分页查询
武装你的WEBAPI-OData资源更新Delta
5. 武装你的WEBAPI-OData使用Endpoint 05-09
武装你的WEBAPI-OData之API版本管理
武装你的WEBAPI-OData常见问题
武装你的WEBAPI-OData聚合查询
OData WebAPI实践-OData与EDM
OData WebAPI实践-Non-EDM模式