孙鑫VC++Lesson2

来源:互联网 发布:freebsd 删除软件 编辑:程序博客网 时间:2024/04/28 11:54
第一个例子:#include <iostream.h>class Point{public:int x;int y;/*void init(){x=0;y=0;}*/Point(){x=0;y=0;}Point(int a,int b){        x=a;y=b;}~Point(){}void output(){cout<<x<<endl<<y<<endl;}void output(int x,int y){this->x=x;this->y=y;}};void main(){Point pt(3,3);pt.output(5,5);//pt.init();//pt.x=5;//pt.y=5;//cout<<pt.x<<endl<<pt.y<<endl;pt.output();}  通过这个例子,我们主要学到了(1)区分了Struct和Class的不同,Struct默认是public的属性,而Class默认是private的属性(2)还有就是一个初始化的问题,这个是面向对象中的一个很重要的问题。一般采用的是构造函数,为了它的唯一性,它用了类名,并且没有返回值。C++规定每一个类必须有一个构造函数,如果没有构造函数就不能创建对象。具体的说:1.C++规定,每个类必须有默认的构造函数,没有构造函数就不能创建对象。 2.若没有提供任何构造函数,那么c++提供自动提供一个默认的构造函数,该默认构造函数是一个没有参数的构造函数,它仅仅负责创建对象而不做任何赋值操作。 3.只要类中提供了任意一个构造函数,那么c++就不在自动提供默认构造函数。 4.类对象的定义和变量的定义类似,使用默认构造函数创建对象的时候,如果创建的是静态或者是全局对象,则对象的位模式全部为0,否则将会是随即的。 (3)虚构函数:当一个对象生命周期完了的时候,系统自动调用这个虚构函数,回收内存。注意:构造函数可以有多个,并且可以带参数,但是虚构参数只能有一个,并且不能带参数(4)重载函数被重载的特征:         1.相同的范围(在同一个类中);         2.函数名字相同;         3.参数不同;         4.virtual关键字可有可无。      覆盖是指派生类函数覆盖基类函数,特征是:         1.不同的范围(分别位于派生类与基类);         2.函数名字相同;         3.参数相同;         4.基类函数必须有virtual关键字。      “隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:         1.如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。         2.如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)。          现在分析一下它们在内存的存储情况:      1、函数的重载与函数的覆盖不同,重载不是子类对父类的同名函数的重新定义,而是类对自身已有的同名函数的重新定义.      2、函数的覆盖中不仅覆盖了父类的函数,同进也把父类的同名函数在子类的内存空间清除掉;但在子类变量的隐藏中屏蔽了父类的变量,可是父类的变量在子类中仍然占有一下的内存空间。(5)this指针
原创粉丝点击