发布时间 : 星期五 文章全国计算机二级C++考试复习知识点汇总更新完毕开始阅读fbff096b580102020740be1e650e52ea5518ced4
金 融 学 院 School of Finance
表达式语句
这些情况下,都有可能调用转换函数。 下面的程序不难理解,就不分析了。 #include iostream.h class CustomDate { public: int da, yr; CustomDate() {}
CustomDate(int d,int y) { da=d; yr=y;} void display() { cout< } };
class Date {
int mo, da, yr; public:
Date(int m,int d,int y) { mo=m; da=d; yr=y; } operator CustomDate(); };
Date::operator CustomDate() {
static int dys[]={31,28,31,30,31,30,31,31,30,31,30,31};
金 融 学 院 School of Finance
CustomDate cd(0,yr); for (int i=0;i cd.da+=da; return cd; }
class Tester {
CustomDate cd; public:
explicit Tester(CustomDate c) { cd=c; } void display() { cd.display(); } };
void dispdate(CustomDate cd) {
cd.display(); }
CustomDate rtndate() {
Date dt(9,11,1); return dt; }
int main() {
Date dt(12,24,3); CustomDate cd;
金 融 学 院 School of Finance
cd = dt; cd.display(); dispdate(dt); Tester ts(dt); ts.display(); cd = rtndate(); cd.display(); return 0; }
六、显式构造函数
注意上面Tester类的构造函数前面有一个explicit修饰符。如果不加上这个关键字,那么在需要把CustomDate对象转换成Tester对象时,编译器会把该函数当作转换构造函数来调用。但是有时候,并不想把这种只有一个参数的构造函数用于转换目的,而仅仅希望用它来显式地初始化对象,此时,就需要在构造函数前加explicit。如果在声明了Tester对象以后使用了下面的语句将导致一个错误:
ts=jd; //error
这个错误说明,虽然Tester类中有一个以Date型变量为参数的构造函数,编译器却不会把它看作是从Date到Tester的转换构造函数,因为它的声明中包含了explicit修饰符。 七、表达式内部的转换
在表达式内部,如果发现某个类型和需要的不一致,就会发生错误。数字类型的转换是很简单,这里就不举例了。下面的程序是把Date对象转换成长整型值。
#include iostream.h class Date {
int mo, da, yr;
金 融 学 院 School of Finance
public:
Date(int m,int d,int y) {
mo=m; da=d; yr=y; }
operator long(); };
Date::operator long() {
static int dys[]={31,28,31,30,31,30,31,31,30,31,30,31}; long days=yr; days*=365;
days+=(yr-1900)/4; //从1900年1月1日开始计算 for(int i=0;i days+=da; return days; }
int main() {
Date today(12,24,2003); const long ott=123; long sum=ott+today; cout< return 0; }