file-type

VC++习题解答:私有数据成员访问与构造函数/赋值函数应用

PDF文件

下载需积分: 15 | 173KB | 更新于2024-08-10 | 96 浏览量 | 4 下载量 举报 收藏
download 立即下载
本资源提供了解决《Visual C++面向对象编程教程》第三章习题的答案。第35题讨论的是关于类的私有数据成员访问问题。原始代码试图在类外直接访问私有成员变量`x`和`y`,这违反了封装原则,因为私有数据应该只在类的内部被访问。改正方法有两种: 1. 使用构造函数赋值:通过在类的公共部分提供一个带有参数的构造函数,如`Point(int a, int b)`,在创建对象时初始化私有数据。这样可以在构造函数内部确保数据的正确设置,代码示例如下: ```cpp class Point { private: int x, y; public: Point(int a, int b) { x = a; y = b; } void Display() { cout << "x=" << x << ",y=" << y << endl; } }; ``` 在`main()`函数中通过构造函数创建对象并显示其值。 2. 公有赋值函数:另一种方法是提供一个公有的赋值函数`Setxy(int a, int b)`,允许外部对象安全地改变私有数据。然后在`main()`中通过这个函数设置值,代码如下: ```cpp class Point { private: int x, y; public: void Setxy(int a, int b) { x = a; y = b; } void Display() { cout << "x=" << x << ",y=" << y << endl; } }; int main() { Point point1; point1.Setxy(100, 200); point1.Display(); return 0; } ``` 第36题要求输出特定时间,但没有给出程序,所以无法提供具体答案。通常,你需要提供一个包含当前时间的函数或使用系统时间库来获取当前时间并输出。 第37题涉及静态成员函数的问题,由于没有完整的程序代码,错误可能在于静态成员函数试图访问非静态数据成员`m_ID`。静态成员函数应该与某个实例无关,而这里需要区分是操作对象还是类本身。正确的做法是,如果`GetID`需要访问`m_ID`,那么应该传入一个对象实例。改正后的部分可能是: ```cpp long Person::GetID(const Person& x) { return x.m_ID; } ``` 然后在`main()`中调用: ```cpp cout << "The ID is: " << person1.GetID() << endl; ``` 注意,这里使用了引用传递,以确保对正确对象的`m_ID`进行操作。

相关推荐

李_涛
  • 粉丝: 60
上传资源 快速赚钱