Windows编程 第二讲 掌握C++(1)

类的封装与继承

类的封装

在C++中,类有两大成员:成员变量成员函数。成员变量可以只在类内被处理,也可以开放给外界
处理。以数据封装的目的而言,前者较为妥当,但有时候也不得不开放。为此,C++提供了Private、Public和Protected三种修饰词。一般而言,成员变量尽可能声明为Private,成员函数则通常声明为Public。数据不允许外界随意存取,只能通过特定的接口来才操作,这就是面向对象的“封装性”。

类的继承

C++神秘而特有的性质在于继承。人类习惯于把相同的性质抽取出来,成立一个“基类” (或称“父类”),再从中衍化出“派生类”(或称“子类”)。
C++的“继承性”正是对人类的这种思维习惯的模拟:子类继承父类的属性和方法,同时能够拥有自身特有的属性和方法。( “面向对象”的观念是描述真实世界的,我们可以用真实生活中的经验去思考程序设计的逻辑。 )

类的继承访问特性
在这里插入图片描述

构造函数与析构函数

构造函数

构造函数的作用是对对象本身做初始化工作,
也就是给用户提供初始化类中成员变量的一种方式。在创建对象的时候,由系统自动调用。构造函数名与类名相同,无返回值。
如果一个类中没有定义任何的构造函数,那么C++编译器会为该类提供一个默认的构造函数,这个默认的构造函数是一个不带参数的构造函数。
只要一个类中自行定义了一个构造函数,C++编译器就不再提供默认的构造函数。

析构函数

析构函数的作用是释放这个对象所占用的资源。在一个对象的生命周期结束的时候,由系统自动调用。析构函数名为:~类名()。对一个对象来说,析构函数是最后一个被调用的成员函数。
根据析构函数的这种特点,我们可以在构造函
数中初始化对象的某些成员变量,给其分配内存空间(堆内存),在析构函数中释放对象运行期间所申请的资源。
析构函数不允许带参数,并且一个类中只能有一个析构函数。

派生类对象的生与死

当构造派生类(子类)的对象时,基类(父类)的构造函数也要被调用,而且在派生类的构造函数之前被调用。

对于析构函数:当派生类(子类)的对象结束时,基类(父类)的析构函数也要被调用,在派生类的析构函数之后被调用——与构造函数反其道而行。

总结:
构造时,父类调用先于子类
析构时,子类调用先于父类

四种不同对象的生与死

在C++中,产生一个对象有四种方法

在这里插入图片描述

1.对于一般局部对象(栈Stack中产生):当对象产生时,构造函数被执行;当函数结束时(以至于对象将毁灭),析构函数被执行。
2.对于new操作局部对象(堆Heap中产生):当对象产生时(执行new操作),构造函数被执行;当delete对象语句被执行时,析构函数被执行。
3.对于全局对象:程序一开始,其构造函数就先被执行(比入口函数main、WinMain更早);程序结束前,析构函数被执行。
4.对于局部静态(static)对象:只会有一个实例产生,而且在固定的内存上(既不是stack也不是heap),执行到第一次声明处(也就是在MyFunc第一次调用)时,构造函数被调用;当程序结束时(对象因此遭致毁灭),析构函数被执行,但比全局对象的析构函数先一步执行。

函数的重载

两个函数的函数名一样,参数的类型和个数不同,这在C语言中不允许,而在C++中是合法的,这就是C++中函数的重载(overload)。C++编译器将根据参数的类型和参数的个数来确定执行哪一个函数。

重载的条件:
函数的参数类型参数个数不同,才能构成函数的重载。

注:

1.只有函数的返回类型不同是不能构成函数的重载的。
如:void output() 与 int output()
2.要注意函数带有默认参数的这种情况,也不能构成重载函数。
如:void output(int a,int b=5)与void output(int a)

虚拟函数与多态性

关于"相同名称之成员函数"

① 如果你以一个“基类之指针”指向“派生类之对象”,那么经由该指针你只能够调用基类所定义的函数。
② 如果基类和派生类都定义了“相同名称之成员函数”,那么通过对象指针调用成员函数时,到底调用哪一个函数,必须视该指针的原始类型而定,而不是指针实际所指的对象的类型而定,这一点与第①点其实意义相同。

虚函数与多态性

多态性
当C++编译器在编译的时候,发现基类的函数是虚函数,这个时候C++就会采用迟绑定(late binding)的技术,在运行时,依据对象的类型(在示例程序中,我们传递的派生类对象的地址)来确认调用的哪一个函数,这种能力就做C++的多态性。

虚函数
在基类的函数前加上virtual关键字,该函数则为虚函数。虚函数派生下去仍为虚函数,而且可以省略virtual关键字。在派生类中重写该虚函数,运行时将会根据指针实际所指的对象的类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数。

纯虚函数与抽象类

纯虚函数
纯虚函数是指被标明为不具体实现的虚函数。纯虚函数可以让类先具有一个操作名称,而没有操作内容,让派生类在继承时再去具体地给出定义。凡是含有纯虚函数的类叫做抽象类。这种可不能实例化对象,只能作为基类为派生类服务。

注:派生类中必须实现基类的纯虚函数,否则,派生类也变成了抽象类, 不能实例化对象。

纯虚函数多用在一些方法行为的设计上。在设计基类时,不太好确定或将来的行为多种多样,而此行为有时必需的,我们就可以在基类的设计中,以纯虚函数来声明此种行为,而不具体实现它。
如: virtual void Fun() =0;

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值