就是定义与原型写在类里面的函数,能操作类的所有对象中的所有成员
class Box { public: double length; // 长度 double breadth; // 宽度 double height; // 高度 double getHeight(); //类中定义的所有成员函数都是内联的 double getVolume() { return length * breadth * height; } };也可以在类外部定义类成员函数,但得使用范围解析运算符 ::
double Box::getHeight() { return height; }
就是public、private、protected。
成员和类的默认访问修饰符是private。
public成员(就不提了)private成员类自己与友元函数才能访问。
class Box{ double width; //默认是private,类以外就无法访问了 public: double length; //类内类外都可以通过成员变量+ . + length调用。 }; protected成员子类也能访问
class Box{ protected double width; //子类可以访问 }; class BoxSon : Box{ //不写就是private继承 public: double getParentWidth(void); //声明 }; double BoxSon::getParentWidth(void) { //外部定义 return width; //父类的protected成员,在Box类是private }概念跟java里的差不多,不返回任何类型(包括void),一般用来初始化成员变量,可以在外部用Box::box( ...){...}定义。
使用初始化列表来初始化字段
Box::box( double wid, double hei ): height(hei), width(wid) { ... }//注意,这里初始化顺序是按照声明顺序来的,即width=wid 先执行。(声明与初始化同步是个好习惯)等价于:
Box::box( double wid ): { width=wid; height=hei; ... }在属于当前类的对象被删除的时候执行,与构造函数同名,没有参数也不返回任何值。
一般用于在跳出程序(比如关闭文件,释放内存等)前释放资源。
class Line { public: void setLength( double len ); Line(); // 这是构造函数声明 ~Line(); // 这是析构函数声明 };
三种场景会调用此函数:
用一个对象初始化同类型的另一个对象,拷贝此对象。Line line2 = line1当对象作为参数被传递给函数时,拷贝此对象;func(Line line)当一个函数返回的是某个对象时,拷贝此对象。func(){return line}场景结束后,会析构掉拷贝出来的对象。
定义在类外部(声明在内部),能访问类中private与protected成员(但它不是成员函数)。
友元类
友元类的所有成员都是另一个类的友元,只需要在这个类的定义中声明:
class A{ friend class B; }那么B能访问A的任何成员,但是反过来不行!!!
很简单的小体积函数,编译时编译器会把函数体挪到调用它的地方,少了调用时间,增
加了空间成本。
this代表某对象的指针,例如:
Class B{ public: int long; int getLong(B b){ return this->long; //this代表调用getLong()方法的B对象的指针。 } }1. 静态成员变量
在类的所有实例中只有一个副本,即实例们共享这一个变量,实例对此变量的修改会被同步。必须在类外用::定义(即分配内存,但是可以不初始化-即赋值);
int Box::objectCount = 0;//也可以不写 =02. 静态成员函数
只能访问静态成员 + 类外部其他函数。
类外通过::访问(类似于java)
Box::getCount();