请教一个抽象类的问题

SteveYoung 2003-09-12 06:06:22
在定义一个抽象类的时候,此抽象类中是否允许含有不为零的初始化数据成员?
例如以下的抽象类定义:

class Index
{
public:
static int x = 100;
virtual void print()=0;
};

是否是错误的?
编译的时候提示了错误,好像x必须定义为0

请高手给给意见,我是初学者,谢谢~~~~~~~~~~~
...全文
37 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
SteveYoung 2003-09-13
  • 打赏
  • 举报
回复
类定义只是一个类型描述,并不包含任何的具体定义和空间分配,
static int x = 100;
在类定义内定义了x,并且为x分配了空间,编译当然出错。
改成
static int x;就对了
-----------------------
请问 wkkevin(傻子中的天才) 老兄:

能在派生类对象中,对static数据成员x赋值吗?
eagle9999 2003-09-13
  • 打赏
  • 举报
回复
对于静态数据成员的初始化一定在类外进行。类在生成对象之前。系统不会分配内存给它。
只有产生了对象才能分配内存。所以你在类内给数据成员赋值是不对的。
zengjd 2003-09-12
  • 打赏
  • 举报
回复
在类的 声名中不能给成员变量初始化,你可以在类的外边初始化它!比如这样:
class Index
{
public:
static int x;
virtual void print()=0;
};
然后在.CPP文件中初始它:
int Index::x=100;
TianGuangZao 2003-09-12
  • 打赏
  • 举报
回复
引用还是引用英文版的原话,上面是翻译过来的,已经经过语言加工,面目全非了,没有上下文,
没法搞懂有序型讲什么。
“不应该对其中的数据成员进行直接定义,如static int x=100;”
稍不同意,static 就是特例呀,它是一定得初始化的。
static 可以用下面一个汽车工厂类的来解释:

class CarFactory { // Car 类是生产 Car 对象的工厂
public:
Car();
static int num_; // 产量,工厂相关数据
private:
int serial_; // 序号,Car 对象数据
};

Car::Car() throw()
: serial_(num_)
{
cout << "Car ctor\n";
++num_;
}

int Car:: num_ = 0; // 类数据经常在 main() 之前自动出始化

int main()
{
//
cout << "Car::num_ = " << Car::num_ << '\n';
{
Car a; // Car 对象 a
cout << "a.serial_ = " << a.serial_ << '\n';
cout << "Car::num_ = " << Car::num_ << '\n';
Car b; // Car 对象 b
cout << "b.serial_ = " << b.serial_ << '\n';
cout << "Car::num_ = " << Car::num_ << '\n';
}
cout << "Car::num_ = " << Car::num_ << '\n';
}

xplichao 2003-09-12
  • 打赏
  • 举报
回复
我也认为类的定义只是一个类型的描述,不应该对其中的数据成员进行直接
定义,如static int x=100;
但是在lippman的 c++ primer 中提到:"有序型的const静态数据成员可以
在类的定义中用一常量进行初始化,如 static const int x=100 ",
请问什么是"有序型"?这到底是怎么回事?
sandrowjw 2003-09-12
  • 打赏
  • 举报
回复
在类的内部只能声明static成员,不可以的定义,所以也不能赋初值,。
wkkevin 2003-09-12
  • 打赏
  • 举报
回复
抽象基类是指至少包含一个纯虚函数的类
虚拟基类只不过是在继承的时候声明为虚拟继承。
class abstractClass
{
...
virtual void func() = 0;
...
};

class derivedClass: virtual public baseClass
{
...
}
wkkevin 2003-09-12
  • 打赏
  • 举报
回复
类定义只是一个类型描述,并不包含任何的具体定义和空间分配,
static int x = 100;
在类定义内定义了x,并且为x分配了空间,编译当然出错。
改成
static int x;就对了
SteveYoung 2003-09-12
  • 打赏
  • 举报
回复
另外再请教一个小问题。

虚基类和抽象基类是否属于同一个概念?

谢谢

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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