惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
Microsoft Azure Blog
Microsoft Azure Blog
L
LangChain Blog
Y
Y Combinator Blog
Microsoft Security Blog
Microsoft Security Blog
宝玉的分享
宝玉的分享
B
Blog RSS Feed
MongoDB | Blog
MongoDB | Blog
Jina AI
Jina AI
D
Docker
B
Blog
Engineering at Meta
Engineering at Meta
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
I
InfoQ
G
Google Developers Blog
博客园 - Franky
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The GitHub Blog
The GitHub Blog
T
The Blog of Author Tim Ferriss
大猫的无限游戏
大猫的无限游戏
阮一峰的网络日志
阮一峰的网络日志
U
Unit 42

博客园 - 珂儿

谈话技巧 用户中心 - 博客园 用户中心 - 博客园 【转载】 正则表达式 致谢 转载:Prototype.js的中文使用手册 C# Program Output Redirect Notes of Store Procedure 猫猫感冒了 从我的衣着改变说起 天无绝人之路 Job hunting准备系列一——关于搜索引擎技术 读书疑问汇总 算法题目汇总 How to influence people and win friends 项目经历总结——IBM实习总结 求职经验汇总 《编程之美》笔记
C++程序设计学习笔记
珂儿 · 2008-06-04 · via 博客园 - 珂儿

    最近一段时间学点c++程序设计方面的基础知识,特随意做一些笔记如下,以备查阅。
    学习C++网站:http://www.cplusplus.com

    1 声明为virtual的方法是必须实现的,而没有声明为virtual的方法可以不实现。
    2 关于virtual

class IntArray{
    public:
        explicit IntArray(int size = DefaultArraySize);
        IntArray(int *array, int array_size);
        IntArray(const IntArray &rhs);
        
        virtual ~IntArray() { delete [] ia;}
        
        bool operator==(const IntArray&) const;
        bool operator!=(const IntArray&) const;
        IntArray& operator=(const IntArray&);
        int size() const { return _size;}
        virtual int test(){return 1;}
        
        virtual int& operator[](int index){
            assert(index>=0&&index<_size);
            return ia[index];
        }
        virtual void sort(){}
        virtual int min() const{return 0;}
        virtual int max() const{return 0;}virtual int test(){return 2;}
        virtual int find(int value) const{return 0;}
        
    protected:
        static const int DefaultArraySize = 12;
        void init(int sz, int *array);
        int _size;
        int *ia;
};

class IntArrayRC : public IntArray{
    public:
        IntArrayRC(int sz = DefaultArraySize);
        IntArrayRC(int *array, int array_size);
        IntArrayRC(const IntArrayRC &rhs);
        virtual int& operator[](int);
        virtual int test(){return 2;}
    private:
        void check_range(int);
};

int main(){
    int array[4] = {0,1,2,3};
    IntArray ia1(array,4);
    IntArray ia2(array,4);
    IntArrayRC iar3(array,4);
    //声明test方法为virtual时,结果是2;未声明为virtual时,结果是1。
    //这个大概就是c++中对于多态的支持????
    IntArray * temp = new IntArrayRC(array,4);
    cout<<temp->test()<<endl;

    cout<<iar3.size()<<endl;
    /*if(ia1==ia2){
        cout<<"yes"<<endl;
    }*/
    
    cout<<"swap() with IntArrayRC ia2"<<endl;
    swap(ia2,1,ia2.size());
    
    return 0;
}
    3 try...catch....
    catch(...){
       //处理任何异常,不过不能访问异常对象;
    }

    3 关于指针和数组
    函数形参可以是多维数组,这样的参数必须指明除了第一维以外的所有维的长度。例如:
    void putValues(int matrix[][la],int rowSize);
    把matrix声明成一个二维数组,每行由10个列元素组成。matrix可以被等价的声明为: int (*matrix)[10];
    多维数组被传递为指向第0个元素的指针,在我们的例子中,matrix的类型是指向含有10个int元素的数组的指针。如同只有一维的数组参数一样。多维数组的第一维与参数类型无关。多维数组的参数类型检查只检查多维数组实参中除了第一维之外的所有维的长度与参数是否相同。
    注意:*matrix周围的圆括号是必须的,因为下标操作符的优先级较高。下列声明:
    int *matrix[10]; 将matrix声明为一个含有10个指向int的指针的数组。
   
    4 缺省实参
    Note:一个参数只能在一个文件中被指定一次缺省实参。例如:下列语句是错误的:
    // ff.h
    int ff(int =0);
    // ff.cpp
    #include<ff.h>
    int ff(int i=0){ // 函数体;} // Error!!!