类和对象

来源:互联网 发布:js utf 8 编辑:程序博客网 时间:2024/05/12 09:59

c++的一大优点就是具有类和对象的概念。类构成了c++面向对象程序设计的基础,是面向对象设计程序的核心。

我们把客观世界中的实体抽象为对象,具有自己的静态属性和动态行为。面向对象的方法不是把程序看做是对一组数据和对该数据进行操作的一系列的函数的结合,而是把程序看做是相互协作又彼此独立的对象的集合(说的很有道理,还不是很理解,这是书上看来的原话)。

类是对一组具有相同属性和行为特征的对象的抽象。对象是类的实化。这两者的关系和结构体和结构体变量的关系有一定相似之处。

1:类的定义:

         

class 类名{private:           私有数据成员和成员函数;  protect:           被保护数据成员和成员函数;  public:          共有数据成员和成员函数;};      //不要忘了这个分号

共有的成员可以被程序中的其他函数访问,共有成员是类的对外接口。

私有成员只能被本类中的成员函数以及友元类的成员函数访问,这个增加了程序的安全性和隐私性。           

保护的成员和私有成员类似,除了可以被本类和友元类的成员函数访问外,该类的派生类的成员也可以访问。  (友元类和派生类以后再说)

在面向对象的编程过程中,封装(encapsulation)是一个很重要的概念,其把对象的全部属性(数据)和全部行为(函数)结合在一起,形成了一个独立单位;另外通过这种封装,把对象的一部分隐藏起来,只保留对外的接口。显而易见一个类应该是有外部接口的,要不就不能进行访问,类也就没有存在的必要了。

2:成员函数:

返回值类型 类名::函数成员名(参数表)

{函数体}//------------举例----------------void clock::set_time(int h;int m,int s){hour=h;  min=m;  second=s;}void show_time(){cout<<hour<<':'<<min<<':'<<second<<endl;}

成员函数的声明要写在类之中,而定义可以写在类外边,但是要用“::”标识。

2.1:带默认值的成员函数。

#include<iostream>using namespace std;class clock{private:int hour, min,second;        public: void set_time(int h=0,int m=0,int s=0);        void show_time();};void clock::set_time(int h,int m,int s){hour=h; min=m; second=s;}    void clock::show_time()    {    cout<<hour<<":"<<min<<":"<<second<<endl;} int main() {clock p1;    p1.set_time(2,3,5);    p1.show_time();return 0; }  //带默认值成员函数和一般带默认值的函数是一样的。需要注意的一点就是: //声明时带默认值,函数原型处不带默认值,否则报错 
  带默认值的成员函数如果不给任何值的话,就会把默认值赋值,一般在一些系统的初始化类还是很有用的,比如上面这个时钟类。

       2.2:内联函数。

内联成员函数和普通内联函数的作用是一样的,一些简单的频繁调用的函数可以定义为内联函数,一般有两种声明方式,一种隐式一种显式。

隐式:直接在类内定义的时候就写明函数定义,不再放在类外进行定义。

显式:依然放在类外定义,但是前面加一个inline 。比如:

class clock{private:int hour, min,second;        public: void set_time(int h=0,int m=0,int s=0);        void show_time(){cout<<hour<<":"<<min<<":"<<second<<endl;}};inline void clock::set_time(int h,int m,int s){hour=h; min=m; second=s;}          //这里 show_time()是隐式,set_time()是显示。
3:类对象。

对象是类的实化,光定义类是没有用的,只有定义了类的实化:对象,内存才会分配空间。

实化格式:   类名  对象名;

       eg:   clock  myclock;

对象可以对类内公开成员进行访问。

myclock.set_time(1,2,3);myclock.clock::settime(1,2,3);//1.这两种写法是一样的,第一个是简化写法。h=myclock.hour;//2.类外不能引用对象的私有成员。这种写法是不对的clock p1,p2;p1>set_time(1,1,2);p2=p1;//3.同类的对象之间可以直接赋值,数据成员赋值,函数不变。但是对象内有指针时,可能出现赋值错误

先写这么多,参考书《c++程序设计》 毕如田主编 


0 0