有关数组越界问题

如题,今天记录一下数组的越界问题。从数组的定义开始说起。当我们需要定义多个同类型的变量我们会选择数组。它的定义格式是:*数据类型 数组名 [数组长度]*例如:int a [4]这是一个int类型的名称为a的数组它的长度为4,也就是它有四个可以存放int类数据的“框”。
在这里插入图片描述
如图,我们刚才定义了四个长度,那就放进去四个数据,这四个元素每一个都带了编号,而这个编号从0开始并非1。元素10的“位置”为0,新手是会晕头转向,但几乎所有的编程语言都从0开始对数组元素进行编号。要适应。上面提到元素的“位置“。位置成为索引,也就是说元素30位于索引2处。

越界是什么呢?比如说你定义了四个长度,你非要放五个元素,这怎么行呢。我们来看看万一越界会发生什么呢?
举个例子:visual6中内存分布有个特点,局部变量所在区域为栈中。我们来看这样一段程序
在这里插入图片描述
下面我们分析一下它的内存情况:如图所示运行过程。
在这里插入图片描述
定义了int i,i分配一个地址;数组也分配了地址图中可以看出,该程序是将数组元素归零。
首先i=0<=10,arr[0]=0,在i++;以此类推一直到i=9,i<=10继续执行,这时arr[9]也为0,在i++,这时候i=10.按道理十个空间到arr[9]这里就没有空间了,就应该结束了,但是继续执行,i=10依旧<=10,*继续执行归0,这是不久越界到了i的地址,本来i已经到9了这不,又给变成了0???重新开始呗!!*这不就死循环了一直循环!
附上举个例子查出来的地址,加深我们的记忆。
但是数组越界又不一定只会导致死循环,这个例子里是因为下方的地址给了i,万一下方的地址是空的呢?那不就相安无事?万一又是其他情况呢?所以我们说数组越界是一个很麻烦的问题。
在这里插入图片描述
在visual6中是这样子,那放在2012中是怎样的呢?更好一些编译器自然在Debug情况下越早发现问题越好,在该问题上他们的处理方式是一旦越界就会触碰到埋下的“地雷”,导致崩溃这不就更容易发现问题去改正了嘛!

### 回答1: C++ 中的 override 关键字表示一个函数是对基类中的虚函数的重写,它用来告诉编译器检查是否存在一个具有相同签名的虚函数,如果存在则覆盖,如果不存在则报错。 例如: ``` class Base { public: virtual void foo() { ... } }; class Derived : public Base { public: void foo() override { ... } }; ``` 在上面的代码中,Derived 类中的 foo 函数对基类中的 foo 函数进行了重写。 注意:C 语言没有 override 关键字。 ### 回答2: C++中的override关键字用于明确表示子类重写父类的虚函数。 当子类中的函数父类中的虚函数签名相同,并在子类中使用override关键字进行声明时,编译器会对其进行检查,确保该函数确实是在子类中重写了父类的虚函数。 使用override关键字的好处有以下几点: 1. 书写风格清晰明确:通过在函数声明末尾添加override关键字,可以让其他开发人员清楚地知道该函数是重写了父类的虚函数,而不是一个新的函数。 2. 编译器检查:使用override关键字可以告诉编译器该函数应该是重写了父类的虚函数,编译器将会在编译时进行检查,如果发现该函数并没有重写任何父类的虚函数,则会给出错误提示。 3. 避免编码错误:在子类中重写父类的虚函数时,可能会因为拼写错误或者参数不匹配等原因导致错误,使用override关键字可以帮助开发人员更容易地发现这些错误,并对其进行修正。 需要注意的是,使用override关键字只能用于重写父类的虚函数,不能用于重写非虚函数或者静态函数。另外,override关键字只是一种语法上的约束,并不会影响程序的运行时行为,它主要是为了提高代码的清晰性和可读性,以及帮助开发人员发现和修正潜在的错误。 ### 回答3: C++中的override关键字用于显式地指示一个函数是覆盖(override)了基类中的虚函数。它在C++11及以后的版本中引入。 当我们在派生类中声明一个函数时,如果该函数基类中的某个虚函数具有相同的函数签名(即函数名及参数列表相同),我们可以在派生类中使用override关键字显式地声明该函数覆盖了基类中的虚函数。这样做的好处是能够提高代码的可读性和可维护性。 使用override关键字的好处在于,它可以帮助我们在编译时捕获一些潜在的错误。一旦我们错误地重写了一个没有虚函数特性的函数(比如函数名拼写错误或参数列表不一致),编译器就会报错,帮助我们检查并修正这些错误。 此外,通过使用override关键字,我们还可以避免在派生类中意外地引入新的虚函数。如果我们在派生类中声明一个函数,希望它覆盖了基类中的虚函数,但是由于函数签名不匹配的原因,它最终成为了一个新的虚函数,这往往会导致程序逻辑错误。 总之,override关键字C++中为了增强可读性和可维护性而引入的一个特性。它可以用于显示地告知编译器,某个函数是为了覆盖基类中的虚函数而声明的。使用override关键字可以帮助我们在编译时发现潜在的错误,提高代码质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值