class 类名{
访问范围说明符:
成员变量1
成员变量2
成员函数声明1
成员函数声明2
访问范围说明符:
更多成员变量
更多成员函数声明
...
};
;结束。
返回值类型 类名:函数名()
{
函数体
}
类名 对象名;
此处,“对象名”的命名规则和普通变量相同。对象也可以看作“类变量”。
#include <iostream>
using namespace std;
class CRectangle
{
public:
int w, h; //成员变量,宽和高
void init( int w_,int h_ ); //成员函数,设置宽和高
int area(); //成员函数, 求面积
int perimeter(); //成员函数,求周长
}; //必须有分号
void CRectangle::init( int w_,int h_ )
{
w = w_; h = h_;
}
int CRectangle::area()
{
return w * h;
}
int CRectangle::perimeter()
{
return 2 * ( w + h);
}
int main( )
{
int w,h;
CRectangle r; //r是一个对象
cin >> w >> h;
r.init( w,h);
cout << "It's area is " << r.area() << endl;
cout << "It's perimeter is " << r. perimeter();
cout << sizeof(CRectangle) << endl;
return 0;
}
第 3~10 行定义了一个类,类的名字就是 CRectangle。在 C++ 中,每个类的名字都是一种类型,可以像 int、double 等基本类型那样来使用。因此,CRectangle 也是一种程序员自己定义的类型的名字。对象名.成员名的方式。例如:
CRectangle r1, r2; r1.w = 5; r2.init(5, 4);
r1.w = 5;这条语句直接对 r1 对象的 w 成员变量进行赋值。它不会影响 r2。对象名.成员函数名的方式可以调用成员函数,并且被调用成员函数是作用在该对象上的。例如,r2.init(5, 4);这条语句就调用了 CRectangle 类的 init 成员函数,该成员函数执行时是作用在 r2 这个对象上的。r2.init(5, 4);这条语句在 init 函数执行期间访问的 w 和 h 就是属于 r2 这个对象的。执行r2.init(5, 4);不会影响 r1。对象名.成员名方法,还可以用指针->成员名的方式来访问对象的成员。例如:
CRectangle rl, r2; CRectangle* p1 = &r1; CRectangle* p2 = &r2; p1 -> w = 5; //此处的 w 属于 p1 指向的对象 p2 -> init(5, 4); //init函数作用在 p2 指向的对象上
引用名.成员名的方式访问对象的成员。例如:
CRectangle r2; CRectangle & rr = r2; rr.w = 5; rr. init(5, 4); //rr的值改变,r2的值也改变
init(2, 4);这条语句是不能编译通过的。因为编译器不清楚这个 init 函数是作用在哪个对象上面的,进入 init 函数以后,其中访问的 w 和 h 的内存地址在哪里无从知晓,因而也就无法编译了。
struct CRectangle{
public:
int w, h; //成员变量,宽度和高度
void init(int w_, int h_); //成员函数,设置宽度和高度
};
没有成员函数的 struct 还是称作“结构”,结构变量不是对象;有成员函数的 struct 就是类。
版权说明:Copyright © 广州松河信息科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州松河信息科技有限公司 版权所有