全国计算机二级C++考试复习知识点汇总 联系客服

发布时间 : 星期五 文章全国计算机二级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; }