C++程序设计学习笔记
2008-06-04 10:48
316 查看
最近一段时间学点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!!!
相关文章推荐
- 【学习笔记】C++高级程序设计:STL:vector
- 【学习笔记】C++高级程序设计:STL:List 和 deque
- C++学习笔记 面向对象程序设计
- c++学习笔记 第二章 c++ 简单程序设计
- C++学习笔记(第三章 多分支结构 循环程序设计 之二)
- 【学习笔记】C++高级程序设计:STL标准模板库(2)
- 【学习笔记】C++高级程序设计:STL:Set 和 Multiset
- C_PlusPlus学习笔记 - 4_C++程序结构 (C++语言程序设计【第三版】 郑莉等,清华大学出版社)
- C_PlusPlus学习笔记 - 6_继承与派生(C++语言程序设计【第三版】 郑莉等,清华大学出版社)
- C_PlusPlus学习笔记 - 1_C++简单程序设计 (C++语言程序设计【第三版】 郑莉等,清华大学出版社)
- 【学习笔记】C++高级程序设计:STL:Map 和 Multimap
- C++ 学习笔记(15)面向对象程序设计(类、继承、虚函数、抽象类、using命令、容器与继承)
- C++程序设计语言学习笔记(三)
- 【学习笔记】C++高级程序设计:STL:函数对象
- C++ 程序设计特别版学习笔记(一)
- C_PlusPlus学习笔记 - 0_绪论 (C++语言程序设计【第三版】 郑莉等,清华大学出版社)
- C_PlusPlus学习笔记 - 2_函数 (C++语言程序设计【第三版】 郑莉等,清华大学出版社)
- C++学习笔记(第三章 多分支结构 循环程序设计 之一)
- 面向对象与C++程序设计-类的继承与派生学习笔记
- C++程序设计语言学习笔记(一)