21 pt.x=10;
22
23 pt.y=12;
24
25 cout<<"x="<<pt.x<<"y="<<pt.y<<endl;
26
27 }
程序运行,结果是正常的,输出赋值的x和y的值。
如果把struct换成class,用类来定义就会有问题,这里是由于访问权限的原因struct的数据成员默认是public的,class默认是private。刚开始不明白,后来想想,大概是类的封装特性吧,为了保护类的数据和类的成员函数。
类和对象
看过几本C++的书,关于类和对象的说明大多很繁琐,过于的术语话,直到后来看到一篇“面向对象思想,不看后悔“的网文才算对类和对象有了稍微清晰的了解。摘一小段过来,重温下。
面向对象的编程语言最大的特色就是可以编写自己所需的数据类型,以更好的解决问题。我想我必须要帮你搞清楚“类,对象,属性,方法它们之间的关系”!就像我前面所说的,人这个“类”是什么也做不了的,因为“人类”只是一个抽象的概念,它不是实实在在的“东西”,而这个“东西”就是所谓的对象。只有人这个“对象”才能去工作。而类呢?类是对象的描述!对象从类中产生出来!此时,对象具有类所描述的所有的属性以及方法。
也许你已经有些不知所措了,没关系!好好的回味一下,我再举个例子!例如电视机,电视机都有工作原理图,那么什么叫电视机呢?只要它能够实现工作原理图的所有功能的物体,我们都叫它电视机。你想想是不是这么一回事儿?可是,电视机原理图是不能工作的,也就是这个原理图不能收看节目,只有电视机这个“实体 ——即所谓的对象”才能收看节目,也就是说,从类生成出对象之后才算得上是真正的有意义!才能开始工作。此时,电视机拥有电视原理图所描述的所有的属性及方法!明白了吧,呵呵!
我先前介绍过,类是属性与方法的集合。而这些属性与方法可以被声明为私有的(private),公共的(public)或是受保护(protected)的,他们描述了对类成员的访问控制。下面我分别做一下介绍:
1. 公共的(public):把变量声明为公共类型的之后,那么就可以通过对象来直接访问,一切都是暴露无遗的!也就是说,你的信用卡密码别人也能够直接得到。
2. 私有的(private):如果把变量声明为私有的情况就好多了,想要得到我的信用卡密码,对象必须要调用专用的方法才能够得到。
3. 受保护的(protected):介绍继承时再讨论。
为了实现数据的封装,提高数据的安全性,我们一般会把类的属性声明为私有的,而把类的方法声明为公共的。这样,对象能够直接调用类中定义的所有方法,当对象想要修改或得到自己的属性的时候就必须要调用以定义好的专用的方法才能够实现。你想想,你会把你的信用卡密码公布出来嘛?呵呵!所以,我们提倡的是: “对象调方法,方法改属性”;
构造函数与析构函数
构造函数的作用是创建对象的时候对对象做初始化工作,也就是给用户提供类的成员变量的初始化的一种方式。这同时也包含了内存分配,我觉得这点最重要。
如果程序设计人员自己不定义构造函数的话,编译器会在下列三种情况下提供默认构造函数。
如果类有虚拟成员函数或者虚基类;
如果基类有构造函数或者编译器提供的默认构造函数;
在类中所有的非静态的数据成员,它们所属的类有构造函数或者编译器提供的构造函数。
1和2好理解些,3?类的数据成员所属别的类,那不就是存在继承关系,和2是一个意思?搞不懂。
当一个对象的生命周期完成时,调用析构函数释放对象所占有的资源。析构函数不容许带参数,一个类中也只有一个析构函数,但是可以在析构函数中添加代码,比如动态分配的指针对象所指向的数组。
函数的重载
在同一个类中,函数名相同,参数个数或类型不同,才可以构成函数的重载,只有返回值的类型不同不能构成函数重载。
int output(int a,int b=5);
int output(int a);
上一页 [1] [2] [3] [4] [5] 下一页