【C/C++】成员变量

来源:互联网 发布:淘宝页面图片 编辑:程序博客网 时间:2024/06/04 18:57

问题1:

哪一种成员变量可以在同一个类的实例之间共享?

问题2:

指出下面程序的错误。如果把静态成员数据设为私有,该如何访问?

#include <iostream>using namespace std; class Cat{public:Cat(int age):itsAge(age) { HowManyCats++; }virtual ~Cat() { HowManyCats--; }virtual int GetAge() { return itsAge; }virtual void SetAge(int age) { itsAge = age; }static int HowManyCats; private:int itsAge; }; int main(){const int MaxCats = 5; int i = 1; Cat *CatHouse[MaxCats]; for (i = 0; i < MaxCats; i++) CatHouse[i] = new Cat(i); for (i = 0; i < MaxCats; i++){cout << "There are "; cout << Cat::HowManyCats; cout << " cats left!\n"; cout << "Deleting the one which is "; cout << CatHouse[i]->GetAge(); ;cout << " years old\n"; delete CatHouse[i]; CatHouse[i] = 0; }return 0; }

问题3:

请问下面程序打印出的结果是什么?

#include <iostream>#include <string>using namespace std; class base {private :int m_i; int m_j; public :base(int i) : m_j(i), m_i(m_j) {}base() : m_j(0), m_i(m_j) {}int get_i() { return m_i; }int get_j() { return m_j; }}; int main(int argc, char* argv[]) {base obj(98); cout << obj.get_i() << endl << obj.get_j() << endl; return 0; }

问题4:

这个类声明正确吗?为什么?

class A{const int Size = 9; }

=======================================================================================

问题1答案:必须使用静态成员变量在一个类的所有实例间共享数据。如果想限制对静态成员变量的访问,则必须把它们声明为保护型或私有型。不允许用静态成员变量去存放某个对象的数据。静态成员数据是在这个类的所有对象间共享的。

问题2答案:该程序错在设定了静态成员变量,却没有给静态成员变量赋初值。如果把静态成员数据设为私有,可以通过公有静态成员函数访问。

#include <iostream>using namespace std; class Cat{public:Cat(int age):itsAge(age) { HowManyCats++; }virtual ~Cat() { HowManyCats--; }virtual int GetAge() { return itsAge; }virtual void SetAge(int age) { itsAge = age; }static int GetHowMany() { return HowManyCats; }// static int HowManyCats;private:int itsAge; static int HowManyCats;}; int Cat::HowManyCats = 0; void tele(); int main(){const int MaxCats = 5; int i = 1; Cat *CatHouse[MaxCats]; for (i = 0; i < MaxCats; i++) CatHouse[i] = new Cat(i); for (i = 0; i < MaxCats; i++){delete CatHouse[i]; tele(); }return 0; }void tele() {cout << "There are " << Cat::GetHowMany() << " Cats alive!\n"; }
问题3解析:

本题想要得到的结果是“98,98”。但是成员变量的声明先是m_i,然后是m_j;初始化列表的初始化变量顺序是根据成员变量的声明顺序来执行的,因此m_i会被赋予一个随机值。更改一下成员变量的声明顺序可以得到预想的结果。如果要得到“98,98”的输出结果,程序需要修改如下:

#include <iostream>#include <string>using namespace std; class base {private :int m_j;// 修改成员变量声明顺序int m_i;  public :base(int i) : m_j(i), m_i(m_j) {}base() : m_j(0), m_i(m_j) {}int get_i() { return m_i; }int get_j() { return m_j; }}; int main(int argc, char* argv[]) {base obj(98); cout << obj.get_i() << endl << obj.get_j() << endl; return 0; }
答案:输出结果第一个为随机数,第二个是98。

问题4解析:

这道程序题存在着成员变量问题。常量必须在构造函数的初始化列表里面初始化或者将其设置为static。

答案:

正确的程序如下:

class A {A(){const int Size = 9; }}; 
或者:

class A {static const int Size = 9; };

此外,还可以使用枚举来定义常量 。

0 0
原创粉丝点击