class Judgement
{
public:
Judgement():nMaxM(8),nMaxN(3)
{
//nMaxM = 8;
//nMaxN = 3;
p_vMatrix = new int*[nMaxM];
for(int i=0; i<nMaxM; i++){
p_vMatrix[i] = new int[nMaxN];
}
}
~Judgement()
{
for(int i=0; i<nMaxM; i++){
delete p_vMatrix[i];
}
delete p_vMatrix;
}
private:
const int nMaxM;
const int nMaxN;
//int v_Matrix[nMaxM][nMaxN];
int **p_vMatrix;
};
类对象的构造顺序是这样的:
1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员
2.进入构造函数后在构造函数中执行一般计算
1.类里面的任何成员变量在定义时是不能初始化的。
2.一般的数据成员可以在构造函数中初始化。
3.const数据成员必须在构造函数的初始化列表中初始化。
4.static要在类的定义外面初始化。
5.数组成员是不能在初始化列表里初始化的。
6.不能给数组指定明显的初始化。
这6条一起,说明了一个问题:C++里面是不能定义常量数组的!因为3和5的矛盾。这个事情似乎说不过去啊?没有办法,我只好转而求助于静态数据成员。
到此,我的问题解决。但是我还想趁机复习一下C++类的初始化:
1.初始化列表:CSomeClass::CSomeClass() : x(0), y(1){}
2.类外初始化:int CSomeClass::myVar=3;
3.const常量定义必须初始化,C++类里面使用初始化列表;
4.C++类不能定义常量数组。
{ public:
exp();
~exp();
unsigned int array[20];
};
如果我们希望实现unsigned int array[20]={1,2,3};的功能,则可以改变此类的定义如下:
class exp
{ public:
exp();
~exp();
unsigned int *array;
};
然后在结构函数exp()中定义:
static unsigned int tmp[20]={1,2,3};
array=tmp;
注意这里必须要用static,否则在exp()函数执行完毕后,tmp[]数组的空间会被释放,array所指向的地址中存放的数组会显示为空。
或者直接就用静态数组算了...
- class myClass
- {
- public:
- static int a;
- myClass()
- {
- }
- };
- int myClass::a = 3; // here initialize
- int main()
- {
- cout << myClass::a;
- return 0;
- }
#include <string.h>
int search(char (*p)[20],char *str);
void main()
{
char str[5][20]={"avddx","12658","sewxx","ssxer","abcde"},s_str[20];
int line;
printf("Please input the string you want to search:");
gets(s_str);
line=search(str,s_str);
printf ("line = %d\n", line);
}
int search(char (*p)[20],char *str)
{
int i;
for(i=0;i<5;i++)
if(strcmp((const char*)*(p+i),str)==0)
return i;
}