| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4448 人关注过本帖
标题:在类中对const数组,const指针数组的初始化.
只看楼主 加入收藏
olivezhang
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-9-14
收藏
 问题点数:0 回复次数:13 
在类中对const数组,const指针数组的初始化.
在类中对const数组,const指针数组的初始化, 这个问题想了好久,也困扰了好久。
比如:

class CTest
{
public:
CTest() {}
private:
const int m_pA[10];
const int *m_ppB[10];
};

此时我们如何对m_pA和m_ppB进行初始化呢?按C++语法,
const型是必须初始化而且只可在类的初始化表中初始化。
但在初始化表中如何实现呢?我没有办法,不知道同行们有啥子好办法?
搜索更多相关主题的帖子: const指针 类中 CTest ppB 
2006-09-07 17:04
olivezhang
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-9-14
收藏
得分:0 
如果是const指针倒是好办,如:

class CTest
{
public:
CTest(const int *pA = NULL) : m_pA(pA) {}
private:
const int *m_pA;
};

但是数组还是没有头绪,各位兄台是否有良策?:)

谷底深深行 ,峰顶漫漫步......@_@
2006-09-07 17:15
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

const int *m_ppB[10]; 可以在構造中初始化:

class CTest
{
public:
CTest(int *k)
{
for(int i=0; i<10; i++)
m_ppB[i] = k+i;
}
private:
const int *m_ppB[10];
};


.......
int a[10] = {.....};
CTest ct(a);


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-09-07 17:50
wangxiang
Rank: 2
等 级:新手上路
威 望:5
帖 子:376
专家分:0
注 册:2006-3-28
收藏
得分:0 
class CTest
{
public:
CTest() {}
private:
const int m_pA[10];
};
这个好象是不行的

2006-09-07 19:06
wangxiang
Rank: 2
等 级:新手上路
威 望:5
帖 子:376
专家分:0
注 册:2006-3-28
收藏
得分:0 
用static const int m_pA[10];来代替const int m_pA[10];吧

2006-09-07 19:23
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
指针数组
顾名思义
还是个const 真想全部都初始化
必须要有足够的数据让它初始化啊
3楼的也可以
就是太危险了吧
参数传一个2级[10]指针就好了

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-09-08 09:24
woodhead
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:1124
专家分:0
注 册:2005-7-18
收藏
得分:0 
[CODE]#include <iostream>
using namespace std;

struct Array
{
int ar[3];
Array(int a[], int n)
{
int max = (n > 3 ? 3 : n);
for(int i=0; i<max; i++)
ar[i] = a[i];
}
};

class A
{
const Array array;
public:
A(int a[], int n):array(a,n){}
void f()
{
cout<<array.ar[0]<<array.ar[1]<<array.ar[2];
}
};

int main(int argc, char *argv[])
{
int b[3] = {1,2,3};
A a(b,3);
a.f();
system("PAUSE");
return EXIT_SUCCESS;
}[/CODE]

实际用途不太大。


2006-09-08 10:17
olivezhang
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-9-14
收藏
得分:0 
谢谢各位的支持,俺获益良多。
1. 在三楼yeshirow版主的方法中,使用时确实有危险,但六楼song4版主说"参数传一个2级[10]指针"是什么意思呢?呵呵,说实话,不明白"2级[10]指针"...:)
2. 四楼wangxiang兄台说的用static const 代替const,这我也想过,但这样的话就不能用对象引用了。
3. 谢谢woodhead老兄的方法,很用启发性。。。

谷底深深行 ,峰顶漫漫步......@_@
2006-09-08 11:18
olivezhang
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-9-14
收藏
得分:0 
class CTest
{
public:
CTest() {}
private:
const int m_pA[10];
};
在我的游戏里,有些对象的数据是不可改变的,所以我就想把它用数组的形式定义为const常量,但象上面这样在类中定义
const int m_pA[10];苦于想不出出始化的方法,呵呵。现在的做法只好把const int m_pA[10];移到类外了,但这样容易重名,而且管理也比较混乱

谷底深深行 ,峰顶漫漫步......@_@
2006-09-08 11:28
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
struct Array
{
int ar[3];
Array(int a[], int n)
{
int max = (n > 3 ? 3 : n);
for(int i=0; i<max; i++)
ar[i] = a[i];
}
};

尽量用sizeof(a)/sizeof(int)来取代n在这里的作用吧,免得出现错误,比如a是10个的数组,n却为11。

struct Array
{
int ar[3];
Array(int a[])
{
int max = (sizeof(a)/sizeof(int) > 3 ? 3 : sizeof(a)/sizeof(int));
for(int i=0; i<max; i++)
ar[i] = a[i];
}
};

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-09-08 14:53
快速回复:在类中对const数组,const指针数组的初始化.
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027530 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved