类和对象第二讲

类和对象第二讲

还是用程序说明:

#include <iostream>
using namespace std;
class time
{
public:
    void set_time();
    void show_time();
private:
    int hour;
    int minute;
    int sec;
};
void time::set_time()
{
    cin>>hour>>minute>>sec;
}
void time::show_time()
{
    cout<<hour<<":"<<minute<<":"<<sec<<endl;
}
int main()
{
    time t1;
    t1.set_time();
    t1.show_time();
    return 0;
}

注意:

(1)在主函数中调用两个成员函数时,应该指明对象(t1)。

(2)在类外定义函数时,应该指明函数的作用域(如void time::set_time())。也可以显式的写出类名并使用域运算符:

void time ::show_time()
{
  cout<<time::hour<<":"<<time::minute<<":"<<time::sec<<endl;
}

(3)还应该注意区分什么场合用域运算符“::”,什么时候用成员运算符“.”。

例:用类和对象的方法求十个数中的最大值

#include <iostream>

using namespace std;
class qiu_max
{
public:
    void set_num();
    void max_num();
    void show_num();
private:
    int a[10];
    int max;
};
void qiu_max::set_num()
{
    for(int i=0;i<10;i++)
    {
        cin>>a[i];
    }
}
void qiu_max::max_num()
{
    max=a[0];
    for(int i=0;i<10;i++)
    {
        if(max<a[i])
        {
            max=a[i];
        }
    }
}
void qiu_max::show_num()
{
    cout<<"max="<<max<<endl;
}
int main()
{
    qiu_max m1;
    m1.set_num();
    m1.max_num();
    m1.show_num();
    return 0;
}

需要注意的是成员函数定义与调用成员函数的关系,定义成员函数只是设计了一组操作代码,并未实际执行,只有在被调用时才真正地执行这一组操作。

                类的封装性和信息隐蔽

类的作用是把数据和算法封装在用户声明的抽象数据类型中。把需要让外界条用的成员函数指定为公用的,外界通过公用的函数来实现对数据的操作。外界与对象唯一的联系渠道就是调用公用的成员函数。

               构造函数。

首先较少为何要引入构造函数这个名词,因为类的数据成员是不能在声明类时初始化的。例如:

class time

{

    hour=0;

    minute=0

    sec=0;

};

这是错误的,以为类并不是一个实体,而是一种抽象的类型,不占存储空间,所以无处容乃数据。

如果一个类中所用的成员都是公用的,则可以在定义对象时对数据成员进行初始化。如:

class time

{

public:

    hour;

    minute;

    sec;

};

time t1={1,2,3};     //t1初始化为1:2:3

简单的构造函数:

#include <iostream>
using namespace std;
class myclass
{
public:
    myclass()
    {
        hour=0;
        minute=0;
        sec=0;
    }
    void set_myclass();
    void show_myclass();
private:
    int hour;
    int minute;
    int sec;
};
void myclass::set_myclass()
{
    cin>>hour>>minute>>sec;
}
void myclass::show_myclass()
{
    cout<<hour<<":"<<minute<<":"<<sec<<endl;
}
int main()
{
    myclass t1,t2;
    t1.set_myclass();
    t1.show_myclass();
    t2.show_myclass();
    return 0;
}

当然了,也可以在类中声明构造函数,在类外定义构造函数。

在类中写:myclass();

在类外写:

myclass::myclass()     //在类外定义构造函数成员函数,要加上类名myclass和域限定符“::

{

    hour=0;

    minute=0;

    sec=0;

}

构造函数是一种特殊的成员函数,与其他成员函数不同,不需要用户调用它,而是在建立对象时自动执行。构造函数的名字必须和类名同名,不能自己指定。它不具备任何类型,不返回任何值。

有关构造函数的使用:

(1)什么时候调用构造函数呢?在类对象进入其作用域时调用构造函数。

(2)构造函数没有返回值。

(3)构造函数不需用户调用,也不能被用户调用。

(4)在构造函数的函数体重不仅可以对数据成员赋初值,而且也可以包含其他语句。但是一般不提倡在构造函数中加入与初始化无关的内容,以保持程序的清晰。

(5)如果用户自己没有定义构造函数,则C++系统会自动生成一个构造函数,只是这个构造函数的函数体是空的,也没有参数,不执行初始化操作。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值