注册 登录
编程论坛 C++教室

[求助]C++ Primer中的一道练习(在线等)

haha188 发布于 2007-11-18 18:52, 1408 次点击

/*
C++ Primer 第四版 第400页 12.6.1 习题
习题12.38
定义一个命名为Foo的类,具有单个int型数据成员。为该类定义一个构造函数,
接受一个int型值并用该值初始化数据成员。为该类定义一个函数,返回其数据成员的值。
习题12.39
给上题中定义的Foo类定义另一个Bar类。Bar类具有两个static数据成员:一个为int型,
另一个为Foo类型。
习题12.40
使用上面两题中定义的类,给Bar类增加一对成员:第一个成员命名为FooVal,返回
Bar类的Foo类型static成员的值;第二个成员命名为callsFooVal,保存FooVal调用
的次数。
*/
下面是我写的,可编译不过去,望高用给指点下

#include <iostream>
using namespace std;
/*定义Foo类*/
class Foo
{
public:
int back()
{
return x;
}
Foo(int n): x(n) {}
private:
int x;
};
/*定义Bar类*/
class Bar
{
public:
Foo FooVal();
int callsFooVal()
{
return count;
}
private:
static int count;
static Foo f;
};
/*定义Bar类的一个操作FooVal */
Foo Bar::FooVal()
{
int count = 0; //定义并初始化static数据成员count
++count;
return f;
}

/*主函数*/
int main()
{
Foo s(5);
cout << "x=" << s.back() <<endl;
Bar b;
b.FooVal();
cout << b.callsFooVal() << endl;
system("pause");
return 0;
}

[此贴子已经被作者于2007-11-18 19:35:32编辑过]

9 回复
#2
haha1882007-11-18 19:22
自己顶上去.
#3
neverDie2007-11-18 20:04
题目抄正确没哦!
#4
liujianlin2007-11-18 20:33

初学者,不知改的对吗
#include <iostream>
using namespace std;
/*定义Foo类*/
class Foo
{
public:
int back()
{
return x;
}
Foo(int n) {x=n;}
private:
int x;
};
/*定义Bar类*/
class Bar
{
public:
Foo FooVal();
int callsFooVal()
{
return count;
}
private:
static int count;
static Foo f;
};
/*定义Bar类的一个操作FooVal */
int Bar::count = 0;
Foo Bar::f=0;
Foo Bar::FooVal()
{
//定义并初始化static数据成员count
++count;
return f;
}

/*主函数*/
int main()
{
Foo s(5);
cout << "x=" << s.back() <<endl;
Bar b;
b.FooVal();
cout << b.callsFooVal() << endl;
system("pause");
return 0;
}

#5
中学者2007-11-18 20:43

静态数据成员的初始化要在程序块外的任意位置

#6
随心2007-11-18 20:45

上面的程序在我这里编译通过

#7
PcrazyC2007-11-18 21:55

看4楼吧,好像是静态变量初始化的问题

[此贴子已经被作者于2007-11-18 22:00:59编辑过]

#8
PcrazyC2007-11-18 22:04

不过最好是这样

#include <iostream>
using namespace std;
/*定义Foo类*/
class Foo
{
public:
int back()
{
return x;
}
Foo(int n) {x=n;}
private:
int x;
};
/*定义Bar类*/
class Bar
{
public:
Foo FooVal();
int callsFooVal()
{
return count;
}
private:
static int count;
static Foo f;
};
/*定义Bar类的一个操作FooVal */
int Bar::count = 0;
Foo Bar::f(0);
Foo Bar::FooVal()
{
++count;
return f;
}

/*主函数*/
int main()
{
Foo s(5);
cout << "x=" << s.back() <<endl;
Bar b;
b.FooVal();
cout << b.callsFooVal() << endl;
system("pause");
return 0;
}

#9
pzj6364842007-12-25 14:21
LS的程序可以
#10
b6292008-01-02 15:27
樓上的可以通過了? ???
1