认识C++的类,对象是类的实例
扫描二维码
随时随地手机看文章
C++是面向对象的语言,对象是类的实例。C++程序员把重点放在称为“类”的用户自定义类型上。
C++中的类是由C的结构演变而来的,结构是由其他类型相关元素组成的一种聚合数据类型。比如下面就是一个结构的定义:
Struct Time{
int hour;
int minute;
int second;
};
程序可以直接访问结构中的元素,并可对其进行任意修改,比如:
Time timeObject;
TimeObject.hour = 200; //0 <= hour <= 23
这样就将一些无效值赋给了结构中的成员。这是C结构的缺点,而C++的类却很好的解决了这种问题。
class Time{ //1
public: //2
Time(); //3
void setTime(int, int, int); //4
void printMilitary(); //5
void printStandard(); //6
private: //7
int hour; //8
int minute; //9
int second; //10
}; //11
正如你所看到的,类不仅封装了数据成员,而且还封装了成员函数。“public”和“private”是成员访问说明符,3-6行属于public成员,8-10行属于private成员。public成员可以由类的使用者来调用,而private成员只能由成员函数和友元访问。我们一般将成员函数声明为public,供类的用户调用,所以public成员函数又叫类的接口。数据成员声明为private是为了不让类的用户对数据进行任意修改,甚至是错误的修改。大家有可能注意到了与类同名的Time()成员函数,它是类的构造函数,声明类对象时会自动调用,它用来初始化数据成员。
我们来看一个具体问题,以便更深刻的了解C++的类。
#include
class Time{
public:
Time(); //3
void setTime(int, int, int);
void printMilitary();
void printStandard();
private:
int hour;
int minute;
int second;
}; //13
Time :: Time(){hour = minute = second=0;}
void Time :: setTime(int h, int m, int s)
{
hour = (h >= 0 && h < 24)?h:0;
minute = (m >= 0 && m < 60)?m:0;
second = (s >= 0 && s < 60)?s:0;
}
void Time :: printMilitary()
{
cout<<(hour < 10?”0”:””)<<hour<<”:”
<<(minute < 10?”0”:””)<<minute;
}
void Time :: printStandard()
{
cout<<((hour == 0||hour ==12)?12:hour % 12)
<<”:”<<(minute < 10?”0”:””)<<minute
<<”:”<<(second < 10?”0”:””)<<second
<<(hour < 12?”AM”:”PM”); //35
}
int main()
{
Time t;
t.printMilitary(); //用军用格式输出自动初始化的时间。
cout<<”/n”;
t.printStandard(); //用标准格式输出自动初始化的时间。
cout<<”/n/n”;
t.setTime(13, 20, 15); //正确设置时间。
t.printMilitary();
cout<<”/n”;
t.printStandard();
cout<<”/n/n”;
t.setTime(99, 99, 99); //错误设置时间。
t.printMilitary();
cout<<”/n”;
t.printStandard();
cout<<endl;
return 0;
}
3-13行为类的定义,15-35行是成员函数的定义,可以在类的定义中定义成员函数,但这不是好的习惯,建议在类定义外定义,在类定义外定义成员函数时要在函数名前加上类名和“::”运算符。