标签:
面向对象的扩展功能
备注:编译器在编译一个类时,会先扫描类定义(不含函数体),之后才扫描类实现(各个成员函数的函数体,静态成员变量的初始化),所以在类的成员函数里可以访问在后面才出现的成员。
const对象调用的成员函数也要求不会修改成员变量的数据。成员函数可以在参数表后用const来宣称自己不会修改当前对象的数据,称为const成员函数。因此,用const对象只能调用const成员函数。
const对象内部如果确实有需要修改的数据成员,用Mutable来修饰即可。
#include<iostream> #include<ctime> #include<cstdlib> using namespace std; typedef int T; class A{//数组类,封装和增强数组的功能 T* a; int len; public: A(int n,T init = T()):a(new T[n]),len(n),cur(0){ //零初始化 for (int i = 0;i<n;i++) a[i] = init; } ~A(){ delete[] a; a =NULL; } int set(int idx,int val){ a[idx] = val; } int get(int idx){ return a[idx]; } void randfill(){ srand(time(NULL)); for(int i = 0;i<len;i++) a[i] = rand()%100; } int size()const{//参数表之后用const来宣称自己不会修改当前对象的数据 return len; } int next()const{ return a[cur++%len]; } mutable int cur; //const对象内部允许修改的成员 void use(const A& x) //const对象调用的成员函数也要求不会修改成员变量的数据 { cout << x.size()<<endl; for(int i=0;i<3;i++) cout<< x.next()<<" "; cout << endl; } }; int main() { A x(10); x.randfill(); for (int i = 0;i<x.size();i++) cout<<x.get(i)<<" "; cout<<endl; x.use(x); system("pause"); return 0; }
运算符重载
在C++中,运算符都被当成函数。C++允许程序员自己来规定运算符如何工作,方法就是自己定义相应的运算符函数。
格式:operatior+运算符 e.g. operatior&,operatior+,operatior++.....,称为运算符重载。运算符函数代替运算符,其中函数参数对应运算符的操作数,函数返回值对应运算符的运算结果。
标签:
原文地址:http://www.cnblogs.com/visions/p/5460340.html