用 "类" 来描述 "对象"
类是属于用户自定义的数据类型
一个类的定义包含两部分的内容, 一是该类的属性, 另一部分是它所拥有的方法。
类的定义:
C++中使用关键字 class 来定义类, 其基本形式如下:
class 类名 { public: //公共的行为或属性 private: //公共的行为或属性 };
注:(1)类名遵循一般的命名规则;
(2)public与private为属性/方法限制的关键字,private表示该部分是私密的,不能被外部所访问或调用,只能被本类内部访问;而public表示公开的属性和方法,外界可以直接访问或调用。
(3)结束部分的分号不能省略。
例子:定义一个点(Point)类,具有以下属性和方法:
属性:x坐标,y坐标
方法:1设置x,y的坐标值;2输出坐标的信息。
实现代码如下:
class Point { public: void setPoint(int x, int y); void printPoint(); private: int xPos; int yPos; };
注释:定义Point类名,有两个私密属性,int型的xPos与yPos,分别用来表示x点和y点;在方法上,setPoint设置,printPoint()输出点的信息;
注意:a.类数据成员不能使用auto、extern和register等进行修饰,也不能在定义时初始化;b.类定义时private和public关键词出现的顺序和次数可以是任意的;c.结束时的分号不能省略!
类的实现:完成其方法的过程
有两种方式:一是在类定义时完成对成员函数的定义;二是在来类定义的外部进行完成;
一是在类定义时完成对成员函数的定义:
例子:
#include <iostream>
using namespace std;
class Point
{
public:
void setPoint(int x, int y) //实现setPoint函数
{
xPos = x;
yPos = y;
}
void printPoint() //实现printPoint函数
{
cout<< "x = " << xPos << endl;
cout<< "y = " << yPos << endl;
}
private:
int xPos;
int yPos;
};
int main()
{
Point M; //用定义好的类创建一个对象 点M
M.setPoint(10, 20); //设置 M点 的x,y值
M.printPoint(); //输出 M点 的信息
return 0;
}
运行结果:x=10 y=20
注释:与类的定义相比,在类内实现成员函数不再是在类内进行声明,而是直接将函数进行定义,在类中定义成员函数时,编译器默认会将其定义为inline型函数。
二是在来类定义的外部进行完成:
在类外定义成员函数通过在类内进行声明,然后在类外通过作用域操作符::进行实现,形式如下:
返回类型 类名::成员函数名(参数列表)
{
//函数体
}
例子:
#include <iostream>
using namespace std;
class Point
{
public:
void setPoint(int x, int y); //在类内对成员函数进行声明
void printPoint();
private:
int xPos;
int yPos;
};
void Point::setPoint(int x, int y) //通过作用域操作符 '::' 实现setPoint函数
{
xPos = x;
yPos = y;
}
void Point::printPoint() //实现printPoint函数
{
cout<< "x = " << xPos << endl;
cout<< "y = " << yPos << endl;
}
int main()
{
Point M; //用定义好的类创建一个对象 点M
M.setPoint(10, 20); //设置 M点 的x,y值
M.printPoint(); //输出 M点 的信息
return 0;
}
运行结果:x=10 y=20
注释:依setPoint成员函数来说,在;类内声明的形式为 void setPoint(int x, int y); 那么在类外对其定义时函数头就应该是 void Point::setPoint(int x, int y) 这种形式, 其返回类型、成员函数名、参数列表都要与类内声明的形式一致。
通过 对象名.公有函数名(参数列表); 的形式就可以调用该类对象所具有的方法, 通过 对象名.公有数据成员; 的形式可以访问对象中的数据成员。
案例:// 找出一个整形数组中的元素的最大值
#include<iostream>
using namespace std;
class Array //定义类,类名:Array
{
public:
void set_value();
void max_value(); //成员函数
void show_value();
private:
int array[11]; //声明数组
int max; //声明最大值变量
}; //需要分号
void Array::set_value() //定义类的函数:输入11个数
{
int i;
for(i=0;i<11;i++)
cin>>array[i];
}
void Array::max_value() //定义类的函数:比较11个数
{
int i;
max=array[0];
for(i=0;i<11;i++)
if(max<array[i])
max=array[i];
}
void Array::show_value() //定义类的函数:输出最大值
{
cout<<"max="<<max<<endl;
}
int main() //主函数
{
Array arrmax; //定义一个Array的变量
arrmax.set_value(); //
arrmax.max_value();
arrmax.show_value();
return 0;
}