class

class
一、类的定义
使用关键字class定义一个类,例如:
class Date {
        int d, m, y;
public:
        void init(int dd, int mm, int yy);

        void add_year(int n);
        void add_month(int n);
        void add_day(int n);
};
上面定义了一个Date类,其中d、m和y称为成员变量,函数称为成员函数。默认情况下,class中定义的成员为private属性,只能由该类的成员函数访问。


二、成员函数的定义
由于不同的类可能具有相同的成员函数名,所以在定义成员函数时,需要指定类的名字,例如:
void Date::add_year(int n)
{       
        y += n;
}
在成员函数里,类的成员是可以直接使用的,不用显示的指明某个对象。


三、构造函数
构造函数与类同名,可以带参数。构造函数没有返回值,也不能将构造函数返回值声明为void类型,例如,上面类的构造函数声明如下:
class Date {
        //...
        Date(int, int, int);
        //...
};
如果一个类具有一个构造函数,那么该类的所有对象的初始化都将通过该构造函数来完成,例如:
Date today = Date(23, 6, 1983);
Date xmas(25, 12, 1990);         // 简写形式
Date my_birthday;                    // 错误:缺少初始化
Date release1_0(10, 12);         // 错误:缺少第3个参数
同其它函数一样,构造函数也支持重载,所以构造函数也可以具有多个。
class Date {
        //...
        Date(int, int, int);
        Date(int, int);
        Date(int);
        Date();
        //...
};


四、析构函数
构造函数用于完成对象的初始化,那么析构函数呢?析构函数用于完成一些清理和释放资源的工作,当一个自动变量离开作用域时,或者当new的一个对象被delete时,析构函数都将被隐式的调用。只有在非常特殊的情况下,用户才需要显式的调用析构函数。析构函数名是在类名前加>上~符号,例如前面类的析构函数定义如下:
class Date {
        //...
        ~Date();
        //...
};


五、静态成员
使用static关键字即可,静态成员只有唯一的副本,而不是每个对象都具有一份副本。
class Date {
        int d, m, y;
        static Date default_date;

public:
        Date(int dd = 0, int mm = 0, int yy = 0);
        //...
        static void set_default(int, int, int);
};

Date::Date(int dd, int mm, int yy)
{
        d = dd ? dd : default_date.d;
        m = mm ? mm : default_date.m;
        y = yy ? yy : default_date.y;
}

静态成员(包括静态变量和静态函数)都必须在某个地方另行定义,静态成员变量和函数定义如下:
Date Date::default_date(16, 12, 1770);
void Date::set_default(int d, int m, int y)
{
        Date::default_date = Date(d, m, y);
}

另外,访问静态成员不必提及任何对象,相反,应该给成员名前加上类的名字,例如:
void f()
{
        Date::set_default(4, 5, 1945);
}


六、结构和类
struct也可以定义类,但是成员默认为public,这是和class最大的区别。以下两个类完全等价:
class Date1 {
        int d, m, y;

public:
        Date1(int dd, int mm, int yy);
        void add_year(int n);
};

struct Date2 {
private:
        int d, m, y;

public:
        Date2(int dd, int mm, int yy);
        void add_year(int n);
};


七、在类里面的函数定义
如果函数定义在一个类里面,而不仅仅是声明,它默认为一个inline函数。例如:
class Date {
public:
        int day() {return d; }
        // ...
private:
        int d, m, y;
};
当然定义inline函数还不只这一种方法,也可以将函数定义在类外面,同时在返回值类型前加上inline关键字就可以将该函数定义成inline函数,例如:
class Date {
public:
        int day();
        // ...
private:
        int d, m, y;
};

inline int Date::day()
{
        return d;
}
上面定义的两组函数完全等价,都是inline函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值