有关返回对象的说明
有几种返回方式可供选择
1指向对象的引用
2指向对象的const引用
3const对象
使用const引用的作用就是为了提高效率
返回指向非const对象的引用
两种常见的返回非const对象的情形是:
1.重载赋值运算符
2.重载与cout一起使用的<<运算符
指针和对象小结
1.使用常规表示法来声明指向对象的指针
String *glamour;
2.可以将指针初始化为指向已有的对象
String *first = &sayings[0]
3.可以使用new来初始化指针,这将创建一个新的对象
String * favorite = new String(saying[choice]);
4.对类使用new将调用相应的类构造函数来初始化新创建的对象;
String *greep =new String ;
String *glop = new String("my my my");
String *favorite = new String(sayings[choice]);
5.可以使用->运算符通过指针访问类方法
if(saying[i].length <shortest->length())
6.可以对对象指针应用解除引用运算符(*)来获得对象
if(saying[i]<*first)
first = &sayings[i];
复习各种技术(总结+使用场景)
1.重载<<运算符
它和cout一起显示对象的内容时,请定义下面的友元运算符函数
ostream & operator<<(ostream &os,const c_name &obj)
{
os<<....;
return os;
}
2.转换函数
要将单个值转化为类类型,需要创建如下所示类构造函数
c_name(type_name value);
c_name为类名,type_name是要转换的类型的名称
要将类转换为其他类型 需要创建原型如下所示的类成员函数
operator type_name();
注意:在声明构造函数的时候使用关键字explicit,以防止被用于隐式转换
3.其构造函数使用new的类
(1)对于指向的内存是由new分配的所有类成员,都应在类的析构函数中对其使用delete,该运算符将释放分配的内存
(2)如果析构函数通过对指针类成员使用delete来释放内存,则每个构造函数都应当使用new来初始化指针,或将它设置为空指针。
(3)构造函数中要么使用new[],要么使用new,而不能混用。如果构造函数使用的是new[],则析构函数应当使用delete[];如果构造函数使用的是new,则析构函数应使用delete
(4)应定义一个分配内存的复制构造函数(拷贝构造函数),这样程序能将类对象初始化为另一个类对象,原型:className(const className &)
(5)应定义一个重载赋值运算符的类成员函数,其函数定义如下(c_pointer是c_name的类成员,类型为指向type_name的指针)
c_name &c_name::operator=(const c-name &cn)
{
if(this == &cn)
{
return *this;
}
delete[]c_pointer;
c_pointer = new type_name[size];
return *this;
}