C++

重载和重写

  方法重载是指同一个类中的多个方法具有相同的名字,但这些方法具有不同的参数列表,即参数的数量或参数类型不能完全相同

   1、方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。

   2、重载Overloading是一个类中多态性的一种表现。

   3、重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。

 

方法重写是存在子父类之间的,子类定义的方法与父类中的方法具有相同的方法名字,相同的参数表和相同的返回类型 

  1、如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)

  2、但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写

  3、若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。

如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类

总结:

1、同样的一个方法能够根据输入数据的不同,做出不同的处理,即方法的重载——有不同的参数列表(静态多态性)

2、而当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,你就要覆盖父类方法,

    即在子类中重写该方法——相同参数,不同实现(动态多态性)

 

重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分? 
答:方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求,不能根据返回类型进行区分

 

OOP三大特性:

封装、继承、多态

1、封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

2、继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展

3、多态性(polymorphisn)多态就是指一个类实例的相同方法在不同情形有不同表现形式

封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用。

访问控制:

友元函数:

1、类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。

2、友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。

3、如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend

不管char*, int*, float*,所有类型的指针变量在32位系统上都是4字节, 64位系统上都是8字节。

struct 占用字节:

原则:

1、struct首地址应为结构体变量最大长度的整数倍

2、每个变量的偏移量应为变量的整数倍

3、struct占用内存总和应为结构体变量最大长度的整数倍

ps:函数不占用内存

虚函数,有个虚拟函数表指针,占用4个字节

static变量不占内存

可用预编译命令#pragma pack(n) 来改变字节对齐规则

为何要内存对齐:

  1、平台原因(移植原因)
             A   不是所有的硬件平台都能访问任意地址上的任意数据的;
             B    某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。
   2、性能原因:
             A   数据结构(尤其是栈)应该尽可能地在自然边界上对齐。
             B   原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值