一.类的定义
class 类名
{
private:成员属性或成员函数
protected:成员属性或成员函数
public:成员属性或成员函数
};
补充:
(1)class是声明类的关键字,class后跟类名。类名一般首字母大写。
(2)类包括成员属性和成员函数。成员属性代表对象的属性;成员函数实现对象的行为。
(3)private、protected和public关键字称为访问权限符,它规定了类中成员的访问属性。这3个关键字可以按任意顺序出现。默认时为私有的(private)。
【例3-1】 声明一个学生类。
分析:每个学生都有学号、姓名和性别;对于学生的基本操作有输入信息、输出信息等。因此,对应的学生类定义如下:
class Student //声明类
{
private: //访问权限:私有成员string m_id; //属性,数据成员,表示学号string m_name; //属性,数据成员,表示姓名string m_sex; //属性,数据成员,表示性别
public: //访问权限:公有成员Student(); //行为,成员函数的原型声明,表示构造函数void input(); //行为,成员函数的原型声明,表示输入学生信息void print(); //行为,成员函数的原型声明,表示输出学生信息
}; //类声明结束
二. 成员访问权限
可以定义3种不同的访问权限符,分别为public(公有类型)、private(私有类型)和protected(保护类型)
public(公有类型)
public 声明成员为公有成员。完全公开。都可以访问
class Human
{
public: //声明类的公有成员int high; //身高int weight;//体重void GetHigh(){cout<<"身高:"<<high<<endl;}void GetWeight(){cout<<"体重:"<<weight<<endl;}
};int main()
{Human zhangsan; //定义类的对象zhangsan.high=175; //通过对象访问类的公有数据成员zhangsan.weight=70; //通过对象访问类的公有数据成员zhangsan.GetHigh(); //通过对象访问类的公有成员函数zhangsan.GetWeight(); //通过对象访问类的公有成员函数return 0;
}
private(私有类型)
private声明成员为私有成员。该级别的成员只能被它所在类中的成员函数和该类的友元函数访问。
class Human
{
private: //声明类的私有数据成员int high; //身高int weight;//体重
public: //声明类的公有成员函数void SetHigh(int h){high = h; //类的成员函数访问类的私有数据成员}void GetHigh(){cout << "身高:" << high << endl; //类的成员函数访问类的私有数据成员}void SetWeight(int w){weight = w; //类的成员函数访问类的私有数据成员}void GetWeight(){cout << "体重:" << weight << endl; //类的成员函数访问类的私有数据成员}
};int main()
{Human lisi; //定义类的对象//lisi.high=185; //错误,不能通过对象访问类的私有数据成员//lisi.weight=90; //错误,不能通过对象访问类的私有数据成员lisi.SetHigh(180); //通过对象访问类的公有成员函数给high赋值lisi.SetWeight(80); //通过对象访问类的公有成员函数给Weight赋值lisi.GetHigh(); //通过对象访问类的公有成员函数lisi.GetWeight(); //通过对象访问类的公有成员函数return 0;
}
从上例可知,private成员只能在类的成员函数中使用。在类外,不能通过对象访问,如lisi.high=185;和lisi.weight=90;都是错误的。
protected(保护类型)
protected声明成员为保护成员。具有这个访问控制级别的成员,外界是无法直接访问的。它只能被它所在类及从该类派生的子类的成员函数及友元函数访问。它和private的区别只在类继承时体现。
三.成员函数实现方式
类的成员函数也是函数的一种。它与一般函数的区别是:它属于一个特定的类,是类的一个成员。
在使用类的成员函数时,要注意它的访问权限(它能否被访问),以及它的作用域(类函数能在什么范围内被访问)。
类的成员函数的定义方式有两种。
-
第一种是在类内直接进行定义。这种方式一般用在代码比较少的成员函数中,并自动成内联函数。
-
第二种是在类中进行函数说明,在类外进行函数定义。这种情况通常用在代码较多的类的成员函数上。在定义函数时,必须用作用域符“::”表明函数所属的类。
形式如下:
返回类型 类名::函数名(参数列表)
{//函数体
}
例如定义时钟类:
#include <iostream>
using namespace std;
class Clock
{
private:int hour; //小时int minute;//分钟int second;//秒
public:void setTime(int h,int m,int s); //类中声明,类外定义void showTime() //类中定义函数{cout<<hour<< "时"<<minute<<"分"<<second<<"秒"<<endl;}
};void Clock::setTime(int h,int m,int s) //定义成员函数
{hour=h;minute=m;second=s;
}int main()
{Clock cc;cc.setTime(8,10,20);cc.showTime();return 0;
}
本片完!