# C++ Primer Plus 12章(二)

C++ Primer Plus 12章(二)

前面对于复制构造函数和赋值运算符进行了简单介绍,下面在此基础上简单的扩展一下。

1.C++空指针的关键字:nullptr

在原来的C风格之中,是使用NULL来表示空指针,以此来区分0和空指针的区别,使用’\0’来区分空字符和0的区别。
现在的c++则使用nullptr去表示这是一个空指针。

2.静态类成员函数和重载赋值运算符

在类的设计中中,无论是成员还是成员函数,如果想要成为静态的,则必须加关键字static 进行声明,然后在方法中进行定义时,不能加static
注意:(1)不能通过对象调用静态成员函数
(2)静态成员函数不能使用this指针

重载赋值运算符如下:
作用:可以将已经存在的对象直接赋值初始化给新的对象,同时,不会造成类成员str指向同一内存的情况。

String &String:: operator=(const char *s)
{
	delete [] str;//先释放原来str指向的内存
	len = std::strlen(s);//然后计算当前字符串的长度
	str = new char[len+1];//使用new创建一个新的内存地址来指向str
	std::strcpy(str,s);//将字符串s 拷贝给str
	return *this;//返回this,即返回指向str的地址的内容
}
3.在构造函数中使用new

(1)构造函数使用new,则对应的析构函数必须使用delete,且new和delete要相互对应
(2)应定义一个复制构造函数,通过深度复制将一个对象初始化为另一个对象

String::String(const String &st)
{
	num_strings++;
	len = st.len;
	str = new char[len+1];
	std::strcpy(str, st.str);
}

(3)应定义一个赋值运算符,通过深度复制将一个对象初始化为另一个对象

String & String::opertor=(const String & st)
{
	if(this == &st)
		return *this;
	delete [] str;
	len = std::strlen(st);//然后计算当前字符串的长度
	str = new char[len+1];//使用new创建一个新的内存地址来指向str
	std::strcpy(str,st.str);//将字符串s 拷贝给str
	return *this;//返回this,即返回指向str的地址的内容
}

上面的两种方式都是为了

能够更好的管理在构造函数中使用了new来初始化对象的指针成员。
4.有关返回对象的说明

成员函数或者独立的函数返回对象时,共有下面三种方式:
(1)返回指向const对象的引用

Vector force(50.60);
Vector force(10,70);
Vector Max;
max =  Max(force1,force2);

const Vector & Max(const Vector & v1, const Vector & v2)
{
	if(v1.magval()>v2.magval())
		return v1;
	else
		return v2;	
} 

说明:返回对象将调用复制构造函数,而返回引用不会;
引用指向的对象应该在调用函数执行时存在;
v1和v2都被声明为const引用,则返回类型也必须为const引用;

(2)返回指向非const对象的引用
重载赋值运算符和重载与cout一起使用的<<运算符

(3)返回对象

Vector  Vector::operator+(const Vector & b) const
{
	return Vector(x+b.x, y+b.y);
}

(4)返回const对象

总结:如果方法或者函数要返回局部对象,则应返回对象,而不是指向对象的引用;如果方法或者函数要返回一个没有公有复制构造函数的类的对象,它必须返回一个指向这种对象的引用;如果函数既可以返回对象,又可以返回引用,此时应选择引用,效率更高。
5.指向对象的指针

可以使用new或者不使用new来创建内存空间管理。
如果使用new的话,要注意释放对象。
初始化的时候,可以初始化为已有的对象,也可以使用new和类构造函数进行初始化。

String * first = &sayings[0];

String * gleep = new String(......);//构造函数可以自选,根据特征进行匹配
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值