ylww

随笔仅作学习记录,请辩证参考!!!

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[ ]字符串也能作下标:

 尽量不要在代码中写裸常量,可用宏定义,若是整型可以采用枚举类型(老标准的枚举类型中的修饰词可以被取出来当整数直接使用,即不通过定义一个变量来使用。

但枚举类型新标准中,得这样定义(限制与整数之间的通用,但若进行强制类型转换是可以的)

enum class  类型名称{     //必须写类型名称

xxx,

yy

};

使用时: 类型名称  变量名  = xxx;是不行的,要这么写  类型名称  变量名  = 类型名称::xxx;

也可以不通过定义一个变量,来直接使用内部的xxx, yy作为整数,但是不但要类型转换,还要加上类型名称:       (int)类型名称::xxx; 

)。

此外:

 当然了在B的test方法内部实现中,定义shape的枚举类型也是可以的,需要这么定义:A::shape(类似于int)  a;

不能这么定义:shape a;

 

 

重载<< 和 >>

此应用方式并不符合一般的编程习惯。

 

 运行结果:

实际上,虽然该方法使用的是全局函数,但是为了封装效果,应该写入对应的类的类文件中。 (实现到类文件,声明到头文件)

 

重载>>

 

运行:

 这里退出时会有错误提示:因为name变量是char*型,Boy类构造函数时,会根据输入的字符长度开辟新的空间。此时“老王”名字长度大于Rock的字符长度,所以出错。

 

一般来讲:char*a= "agfs"; a = "dgasgasg";这是可以的,但是cin或者scanf 对a 是不行的。

上面的函数能够cin >> boy.name是因为this->name指向的是堆空间,所以可以更改。这种情况下c的scanf_s也是可以的。

那么如何解决错误:

 

 

 

 输出结果:

 

 

 

在boy类中进行实现:

 运行结果:

 

 

//可以采用第二种方式(类类型==>普通类型)实现,但不是太妥当,可能引起歧义。

 运行:

 这里年龄错误是因为,age = boy[AGE];函数调用发生错误,为什么呢:

因为,Man的构造函数中,boy是常引用,对象是常量对象。下标重载函数的方法不是常量方法,所以不能调用。

 将这两种方法加上const;定义之处也要加。重新实行:

 

posted on 2022-10-03 11:04  理想主义者光芒万丈  阅读(27)  评论(0)    收藏  举报