最近一段时间学点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!!!
学习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!!!