c++的面向对象基础 Day 2

概述

c++不仅扩充了c面向过程的功能,而且增加了面向对象的功能,这就是c++成为能适应面向对象程序设计的现代大语言。

从计算机的角度,一个对象应该包括两个要素:一是数据,二是需要进行的操作。传统的面向过程程序设计是围绕功能进行的,用一个函数实现一个功能。所有的数据都是公用的,一个函数可以使用任意一组数据,而一组数据又能被多个函数所使用。面向对象程序设计采用新的思路,它面对的是一个个对象,所有的数据分别属于不同的对象。

面向对象的程序设计方法的一个重要的特点就是封装性,把数据和操作代码封装在一个对象中。程序设计者的任务包括两个方面:一是设计对象,即决定把哪些数据和操作代码封装在一个对象中,二是在此基础上怎样通知有关对象完成所需的任务。
类和对象
对象的类型为类,类代表了某一批对象的共性和特征。类是对象的抽象,而对象是类的具体实例。
 class stud
 { int num;
   char name[10];
   char sex;

   void display()
   { cout<<"num:"<<num<<endl;
     cout<<"name:"<<name<<endl;
     cout<<"sex:"<<sex<<endl;
   } 
 };
 stud stud1,stud2;   

这就声明了一个名为 stud的类。可以看到声明类的方法是由声明结构体类型的方法发展而来的。它除了包含数据部分以外,还包括了对这些数据的操作部分,也就是把数据和操作封装在一起。display是一个函数,用来输出本对象中学生的学号、姓名和性别。类除了具有封装性外,还采用了信息隐蔽原则,使类的成员与外界的联系减少到最低程度。但是还是需要有外界的接口,一般是把数据隐藏起来,而把成员函数作为对外界的接口。接着,就有了类的成员包括两大类:一类是私有的;一类是公有的,还有一类是受保护的。

 class stud
 { 
   private:
   int num;
   char name[10];
   char sex;

   public:
   void display()
   { cout<<"num:"<<num<<endl;
     cout<<"name:"<<name<<endl;
     cout<<"sex:"<<sex<<endl;
   } 
 };
 stud stud1,stud2;   

现在声明了display函数是公用的,外界就可以调用该函数了。
介绍在面向对象程序设计中的几个名词,类中的成员函数称为方法,方法是对数据的操作,一个方法对应一种操作。显然只有被声明为public的方法(成员函数)才能被对象外界所激活。外界是通过发消息来激活有关方法的。所谓消息,其实就是一个命令,由程序语句来实现的。例如想输出对象stud1中的学生学号、姓名、性别等信息,可以在程序中写

stud1.display();

这就是向对象发出的一个消息,通知它执行display方法。
三个概念:对象 、方法、消息

归纳以上对类型的声明,可以得到其一般形式:
class 类名
{private:
私有的数据和成员函数;
public:
公用的数据和成员函数;
};

构造函数和析构函数

1、构造函数
在建立一个对象时,常常需要作某些初始化的工作(例如对数据赋予初值),C++提供了一种特殊的成员函数–构造函数(constructor),这种函数与其他成员不同,不需要用户发消息来激活它,而是在建立对象时自动执行,构造函数是由用户定义的,它必须与类名同名,以便系统能识别它并把它作为构造函数。现在我们在前面声明的类中加入构造函数。

class stud    //声明一个类,以class开头
{private:   //私有的数据和成员函数
 int num;
 char name[10];
 char sex;
              //以上三行是数据成员
 public:    //公用的数据和成员函数
 stud()      //定义构造函数,函数名与类名相同
 {num=10010'
 strcpy(name,"Wang_li");
 sex='F';}    //给数据赋初值

void display()  //这是成员函数
{cout<<"num:"<<num<<endl; 
 cout<<"name:"<<name<<endl;
 cout<<"sex:"<<sex<<endl;}
};
stud stud1;  //在定义对象stud1时自动执行构造函数;

==注意:构造函数不需要用户调用,而是在定义一个对象时系统自动执行,而且只能执行一次。构造函数一般声明为public,无返回值,也不需要加void类型声明。

#include<string.h>
#include<iostream.h>
void main()
{
    class stud
    { private:
        int num;
        char name[10];
        char sex;
      public:
        stud()
        {num=10010;
         strcpy(name,"Wang_li");
         sex='F';}

        void display()
        {cout<<"num:"<<num<<endl;
         cout<<"name:"<<name<<endl;
         cout<<"sex:"<<sex<<endl;}
    };
    stud stud1;
    stud1.display();
    //cout<<stud1.num;
}

如果要建立两个对象,分别对数据赋予初值,就不能这样定义构造函数stud了,因为它会使两个学生的初值相同,例如姓名都是Wangli。应该分别赋予不同的初值,可将构造函数修改如下:

stud(int n,char nam[],char s)
{num=n;
 strcpy(name,nam);
 sex=s;
}

完整程序即为

#include<iostream.h>
void main()
{
    class stud
    { private:
        int num;
        char name[10];
        char sex;
      public:
        stud(int n,char nam[],char s)//定义构造函数,有形参
        {num=n;
         strcpy(name,nam);
         sex=s;
        }

        void display()
        {cout<<"num:"<<num<<endl;
         cout<<"name:"<<name<<endl;
         cout<<"sex:"<<sex<<endl;}
    };
    stud stud1(10010,"Wang_li",'f'),stud2(10011,"Zhang_fen",'m');
    stud1.display();
    stud2.display();
    //cout<<stud1.num;
}

用户也可以不定义构造函数,编译系统会自动生成一个构造函数,该函数没有参数,不进行任何操作。

构造函数也可以重载,下面是两个重载函数:

 stud()//定义构造函数,无形参
        {num=10010;
         strcpy(name,"Wang_li");
         sex='f';
        }

        stud(int n,char nam[],char s)//定义构造函数,有形参
        {num=n;
         strcpy(name,nam);
         sex=s;
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值