面向对象之亡羊补牢

本文是对面向对象编程中错误处理和重要概念的总结,包括报错信息的解析、构造函数与析构函数、运算符重载、继承的四种方式及其特点、深拷贝的实现以及模板和多态的基础知识。通过对这些知识点的回顾,旨在提高对面向对象编程的理解和应用能力。
摘要由CSDN通过智能技术生成

面向对象之亡羊补牢

前言:由于期中考后的周测不甚理想,面向对象题几乎次次爆零。现临近期末,来对面向对象模块做一波总结,感谢杨老师、周老师的课件和指导。

报错信息总结

  • 引用类型的返回值
intMyVector&  operator+ (intMyVector  &u, intMyVector  &v)
{
   
	intMyVector tmp(u.n);
	for(int i =0; i < v.n - 1; ++i)
		tmp.p[i] = u.p[i] + v.p[i];
	return tmp;
}

报错:warning: reference to local variable ‘tmp’ returned [-Wreturn-local-addr]

解决方案:

1、将intMyVector& operator+ (intMyVector &u, intMyVector &v)改为intMyVector operator+ (intMyVector &u, intMyVector &v)就行,把&删掉即可。

2、返回值为引用: 结合this指针使用,返回 *this

原因:在原来的代码里面,表示引用的符号&暗示函数返回的是一个地址,但要注意tmp是一个临时变量,当函数体执行结束时,tmp的内存空间也随机消失了,而我们不能返回一个不存在的地址。

  • 类的构造
class Counter
{
   
	public:
//    Counter(){value=0;}
    ……
};

Counter operator*(Counter c1,Counter c2)
{
   
	Counter temp;
    temp.value=c1.value*c2.value;
    return temp;
}

在这里插入图片描述

解决方案: **Counter(){value=0;}**补上无参构造函数

原因:类类型 类名 的方式实例化类,需要无参构造函数

知识点总结

构造函数

  • 作用:在定义对象时,实现初始化

    每个类都应该有一个构造函数,若没提供,编译器自动生成(参数、方法都为空)。如果自己定义了,就不会再提供自动生成的了

  • 特点:

    1. 构造函数名==当前类名
    2. 只执行一次 参数可有可无,但一定没有返回值
    3. 只能public
  • 注意:

    1. 构造函数可以进行重载,以便用于不同形式的对象的定义。
    2. 构造函数还可以使用默认的缺省参数。如果构造函数既有重载,又有缺省参数时,注意不要产生二义性
  • 参数初始化表:

    除了构造函数,还有参数初始化表对数据初始化,在函数首部实现

    BOX::BOX(int h,int w,int len):height(h),width(w),length(len){
         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值