如何初始化const char * p[5]数据成员?

ufouser 2003-07-29 06:10:50
如何初始化const char * p[5]数据成员?请写个简单的例子.
类中数据成员static const int SIZE;的常量值为何不可用来确定数组大小?(DEV-C++4.9.8.0)(繁请解释详细)


...全文
249 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lieyanfriend 2003-07-29
  • 打赏
  • 举报
回复
枚举替代吧。有几层楼是正确的。
短歌如风 2003-07-29
  • 打赏
  • 举报
回复
它的隐含数据类型是整数这个问题并不是问题。因为在C++中,只有整数类型才能成为真正的常量,在编译时就确定它的值并使用,而其它类型如double的常量只是一个“不允许改变值的变量”。
事实上,下面这个声明:
const int a = 3;
如果你在代码中从来没有取a的地址或引用,按照规定,编译器是不会为a分配地址空间的。而
const double a = 3.0;
则一定会为它分配一个地址空间。
因此,枚举常量和整型常量最常用到的情况(作为“真正的常量”)行为是相似的,在不能正确处理整数常量的编译器上使用枚举代替是一种可行的办法。
  • 打赏
  • 举报
回复
枚举常量不会占用对象的存储空间,它们在编译时被全部求值。枚举常量的缺点是:它的隐含数据类型是整数,其最大值有限,且不能表示浮点数(如PI=3.14159)。
  • 打赏
  • 举报
回复
类定义中不能对成员变量初始化,只能在构造函数中对成员变量初始化。对常成员变量要
采用初始化表。

class X {
const int SIZE ;
const char * p[SIZE];
punlic:
X();
};

X::X() : SIZE(size) // 构造函数的初始化表
{

}

使用:
A a(100); // 对象 a 的SIZE值为100
A b(200); // 对象 b 的SIZE值为200

要建立在整个类中都恒定的常量,别指望const数据成员了,应该用类中的枚举常量来实现。
例如:

class X
{
enum{SIZE1 = 100, SIZE2=200};
const char * p1[SIZE1], *p2[SIZE2];
};

allen1981813 2003-07-29
  • 打赏
  • 举报
回复
class X
{
public:
enum{ SIZE = 5 };
const char* p[SIZE];
};

const char ::* p = { 0 };
短歌如风 2003-07-29
  • 打赏
  • 举报
回复

数组不支持拷贝构造和赋值,初始化有两种方法:
1:在构造函数里用循环或其它语句对每一变量赋值。因为你的数组不是常量数组,这样是可行的。
2:改用结构把数组封装起来:
template<int S>
struct strary
{
const char * values[S];
};

class X
{
public:
enum{SIZE = 5};
private:
strary<SIZE> p;
public:
X();
};

//在实现单元:
strary<X::SIZE> init_data = {{"abc", "xyz", "123", "test", "hello"}};

X::X()
:p(init_data)
{
// ...
}

}
短歌如风 2003-07-29
  • 打赏
  • 举报
回复
jyfcsdn写错了,是个语法错误。应该是:
class X
{
enum{SIZE = 5};
const char * p[SIZE];
};
jyfcsdn 2003-07-29
  • 打赏
  • 举报
回复
你的编译器是不是VC60, 它不支持这样初值,<<Effective C++>>书中介绍了下面变通的古老方法
X.h
class X
{
enum SIZE {5};
const char * p[SIZE];
}
ufouser 2003-07-29
  • 打赏
  • 举报
回复
原本想这样的:
class X {
static const int SIZE = 5;
const char * p[SIZE];
}
却不知如何初始化这SIZE个p指针.
编译时static const int SIZE = 5;这一行也报错.
谁帮我改改.

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧