类与对象
3.1 类
■类是面向对象程序设计的基础和核心,也是实现数据抽象的工具。类中的数据具有隐藏性和封装性,类是实现C++许多高级特性的基础。
■类定义的语法格式:
class 类名
{
private:
<私有数据成员,私有成员函数>;
public:
<公有数据成员,公有成员函数>;
protected:
<保护型数据成员,保护型成员函数>;
};
示例
class Date //类声明,类名Date
{
private: //私有成员,类外不能够访问
int year,month,day; //数据成员
public: //公有成员,类外能够访问
void print(){//函数成员pirnt()
cout<<year<<'-'<<month<<'-'<<day<<endl;
}
void set(int y,int m,int d){ //函数成员set()
year=y; month=m;day=d;
}
};
3.2 类的成员函数
1.在类体之外定义成员函数
■为了提高类的可读性,常常把成员函数放在类定义体之外,而类体只保留成员函数的原型声明
■在类体之外定义成员函数成为外联函数
■成员函数类外定义的语法格式:
函数类型 类名::成员函数名(形式参数表)
{
//函数体
}
示例
class Date //类声明,类名Date
{
private: //私有成员,类外不能够访问
int year,month,day; //数据成员
public: //公有成员,类外能够访问
void print(); //声明函数成员print()
void set(int y,int m,int d);//声明函数成员set()
int get_year(); //声明函数成员 get_year()
};
//类外实现函数成员print()
void Date::print(){
cout<<year<<'-'<<month<<'-'<<day<<endl;
}
//类外实现函数成员set()
void Date::set(int y,int m,int d){
year=y; month=m; day=d;
}
//类外实现函数成员get_year()
int Date::get_year(){
return year;
}
例子,定义求和类
class Sum //定义求和类
{
private:
int s;
public:
void setSum(int x); //函数成员类内原型声明
void print(); //函数成员类内原型声明
};
void Sum::setSum(int x) //函数成员类外实现
{
s=0;
for(int i=1; i<=x;i++) s=s+i;
}
void Sum::print() //函数成员类外实现
{
cout<<"1+2+3+...+x="<<s<<endl;
}
int main()
{
Sum asum;
asum.setSum(6);
asum.print();
return 0;
}
把6赋值给x运行:
3.3内联函数
内联函数定义方法:
1).在类体内定义成员函数
class A
{
.......
void fun()
{
......
}
......
};
2).在类内函数原型前使用inline关键字声明
class A
{
......
inline void fun();
......
};
void A::fun()
{
......
}
3.4 对象
■由同一个类创建的各个对象具有完全相同分数据结构,但它们的数据值可能不同。
■1.对象的创建(也称为类的实体化)
格式: 类名 对象名;
■2.类成员的访问
—对于类成员的访问,如果在该类内部访问类成员,只要指出它的名字就可以直接使用。
—如果在类的外部使用类成员,则要通过类的对象来访问其公有成员。
对象名.公有数据成员名;
对象名.公有成员函数名(实参表);
注意:
—只有public权限的成员才能是同成员运算符“.”在类外访问。
—对象中的私有成员是类中隐藏的数据,不允许在类外的程序中被直接访问,只能通过该类的公有成员函数来访问它们。
例:创建一个圆类,计算圆的面积
#include<iostream>
using namespace std;
const double PI=3.14159;
class Circle
{
private:
double radius;
public:
void setRadius(double r);
double cirArea();
};
void Circle::setRadius(double r)
{
radius = r;
}
double Circle::cirArea()
{
double area = 0;
area = PI*radius*radius;
return area;
}
int main()
{
double s,r=3;
Circle cir; //定义对象cir
cir.setRadius(r);//公有成员可以外部访问
s=cir.cirArea();//公有成员可以外部访问
cout<<"圆的面积="<<s<<endl;
}