本文主要是介绍孙鑫VC++Lesson2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
第一个例子: #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指针
这篇关于孙鑫VC++Lesson2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!