类与对象(4)

int & Value(Int *const this)
//int & Value(Int * const this);

int & Value(const Int * const this)
//int &Value() const {return Value;}

以上这两个函数是 算重载函数的,因为this的不同。但是用const修饰返回值时不可以作为重载的依据。 

class Int
{
private:
  int value;
public:
  ​
int & Value()//int & Value(Int * const this);
{
  return vlaue;
}

int & Value() const//int &Value() const 
{return Value;}

​}
int main()
{
  Int a{10};
  const Int b{20};
  cout<<b.Value()<<endl;
  cout<<a.Value()<<endl;
}

这个程序是无法编译通过的,因为b无法调用Value函数,虽然已经在最后加了const表示常方法 ,但是以引用的返回没有常性,这相互矛盾。

 系统会说无法将const int转化为左值引用,因为你返回的value是个右值。

可以将这个函数改成

const int & Value() const//int &Value() const 
{return Value;}

​}

这样 就可以了。

但是我们只可以对其取值,不可以改变它的值,因为是常对象。

vector(顺序链表)

Int& Add(const Int &it) const
{
  int x=this->value+it.value;
  return  Int(x);
}
//c=a.Add(b);
//c=Add(&a,b);

这个函数这样写是错误的,因为返回的是一个不具名的右值对象,但是返回值是以左值引用设置的。

Int &&  Add(const Int &it) const
{
  int x=this->value+it.value;
  return Int(x);
}

这样也是不对的,用右值引用作为返回值的话返回的是他的地址,但是函数结束整个函数所有内容已经被消亡掉,无法根据地址找到具体的。

类型的缺省函数有:

1、缺省的构造函数

2、缺省的 析构函数

3、缺省的拷贝构造函数

4、缺省的赋值语句

没有缺省的移动函数

5/6、两个取地址符

int类型强转

operator  int() const
{
  return value;
}
int main()
{ 
  x=(int)a;
}

不需要返回值类型,因为本身就是int类型的强转。

构造函数补充

打印出来的结果是:

实部是一个随机值,而虚部2

因为初始化顺序不是按照参数列表初始化的,而是按照你定义的顺序

所以会先初始化m_real的值,这时m_image还未初始化,所以会变成随机值

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值