码迷,mamicode.com
首页 > 编程语言 > 详细

C++学习笔记06

时间:2016-05-05 01:55:44      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

面向对象的扩展功能

    备注:编译器在编译一个类时,会先扫描类定义(不含函数体),之后才扫描类实现(各个成员函数的函数体,静态成员变量的初始化),所以在类的成员函数里可以访问在后面才出现的成员。

    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++.....,称为运算符重载。运算符函数代替运算符,其中函数参数对应运算符的操作数,函数返回值对应运算符的运算结果。

      

      

C++学习笔记06

标签:

原文地址:http://www.cnblogs.com/visions/p/5460340.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!