2021.4.14牛客刷题小结

本文介绍了C++中的方法重载和重写,强调了两者的关键区别,并探讨了枚举类型、数组越界问题以及Math.floor()函数的使用。同时,讲解了子类构造函数的规则和数组地址的理解,最后讨论了一些编程杂项,如构造方法的特性等。
摘要由CSDN通过智能技术生成

2021.4.14牛客刷题小结


前言

以下内容仅供参考。


C++

1、重载和重写

方法的重载:

定义:同一个类或与他的派生类中,方法名相同,而参数列表不同的方法。其中参数列表不同指的是参数的类型,数量,类型的顺序这三种至少有一种不同。
方法重载与下列无关:

1、与 返回值类型 无关;
2、与 访问修饰符 无关

重载的判定只有两个条件:

1、方法名一致。
2、形参列表不同。

重载是多态在编译期的表现形式。
构造方法也可以重载

方法的重写(覆盖):
定义:重写在方法运行时,通过调用者的实际类型来确定调用的方法版本。(具体来说,就是子类中重写方法在对应的class文件常量池的位置相同,一旦子类没有重写,那么子类的实例就会沿着这个位置往上找,直到找到父类的同名方法)。
特点
1、重写只发生在可见的实例方法中。
2、私有方法也不存在重写,父类中private的方法,就算子类定义了也只相当于一个新方法。
3、静态方法和实例方法不存在相互重写。
4、重写满足规则:

1、两同:方法名和形参列表一致。
2、两小:重写的方法返回值(引用类型)和抛出异常,要和被重写方法的返回值和抛出异常相同或者是其子类。
注意,一旦返回值是基本数据类型,那么重写方法和被重写方法必须相同。
3、一大:重写的访问修饰符大于被重写方法的访问修饰符。

方法重写的注意事项:
构造方法不能被重写,不要问为什么?因为构造方法名必须和类名相同
private修饰的成员方法不能被重写
static修饰的方法不能被重写
final修饰的方法不能被重写
当子类重写了父类中的方法后,子类对象调用该方法时调用的是子类重写后的方法

2、enum枚举类型结构体

#include <iostream>
using namespace std;
typedef enum
{
    Char ,
    Short,
    Int,
    Double,
    Float,
}TEST_TYPE;
int main() {
    TEST_TYPE val;
    cout<< sizeof(val)<<endl;
        return 0;
}

枚举类型,指一个被命名的整型常数的集合
即枚举类型,本质上是一组常数的集合体只是这些常数有各自的命名。枚举类型,是一种用户自定义数据类型。
枚举变量由枚举类型定义的变量。枚举变量的大小,即枚举类型所占内存的大小。由于枚举变量的赋值,一次只能存放枚举结构中的某个常数。所以枚举变量的大小实质是常数所占内存空间的大小(常数为int类型,当前主流的编译器中一般是32位机器和64位机器中int型都是4个字节),枚举类型所占内存大小也是这样。

3、数组越界

int main ()
{
	int i,a[5];
	for (i=0;i<=30;i++)
	{
		a[i]=0;
		printf("%d:hello\n",i);
	}
	printf("%d:hello world",i);
	return 0;
}

输出结果为: 多行的 i:hello (i∈[0,30] )

i的地址与a[5]的地址相同,因此循环到i=5时,i的值会被修改,于是造成死循环。
这里与声明的顺序有关。从右往左定义。

int main(void) {
    int i,a[5];
	cout<<"&i = "<<&i<<endl;
	cout<<"&a[0] = "<<&a[0]<<endl;
	cout<<"&a[5] = "<<&a[5]<<endl;
	return 0;
}
输出:
&i = 0x61ff0c
&a[0] = 0x61fef8
&a[5] = 0x61ff0c

4、 Math.floor(x)函数

返回小于等于x的最接近整数,类型为double

5、子类构造函数

template<class T> class Foo{
    T tVar;
    public:
        Foo(T t) : tVar(t) { }
};
 
template<class T> class FooDerived:public Foo<T>
{
};
 
int main()
{
    FooDerived<int> d(5);
    return 0;
}

当基类构造函数需要外部传递参数才能进行初始化时,派生类必须显式定义构造函数为基类传递参数
基类如果不需要传递或者可以不传递参数,派生类可以不用显式定义构造函数。

6、数组地址

X[ii][j]*(X+ii)[j]不等价
因为[]结合性>`*`
改为(*(X+ii))[j]就对了

7、杂

"%%d"

输出为%d

总结

今天刷题也不多,在树上花了比较多时间,明天应加油完成简单排序算法博客。

参考

[1]:https://www.nowcoder.com/questionTerminal/830d1dbe2d1a4481ae4f753d77d2e89a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值