【C/C++】成员变量
2015-08-29 19:38
337 查看
问题1:
哪一种成员变量可以在同一个类的实例之间共享?
问题2:
指出下面程序的错误。如果把静态成员数据设为私有,该如何访问?
问题3:
请问下面程序打印出的结果是什么?
问题4:
这个类声明正确吗?为什么?
=======================================================================================
问题1答案:必须使用静态成员变量在一个类的所有实例间共享数据。如果想限制对静态成员变量的访问,则必须把它们声明为保护型或私有型。不允许用静态成员变量去存放某个对象的数据。静态成员数据是在这个类的所有对象间共享的。
问题2答案:该程序错在设定了静态成员变量,却没有给静态成员变量赋初值。如果把静态成员数据设为私有,可以通过公有静态成员函数访问。
本题想要得到的结果是“98,98”。但是成员变量的声明先是m_i,然后是m_j;初始化列表的初始化变量顺序是根据成员变量的声明顺序来执行的,因此m_i会被赋予一个随机值。更改一下成员变量的声明顺序可以得到预想的结果。如果要得到“98,98”的输出结果,程序需要修改如下:
问题4解析:
这道程序题存在着成员变量问题。常量必须在构造函数的初始化列表里面初始化或者将其设置为static。
答案:
正确的程序如下:
此外,还可以使用枚举来定义常量 。
哪一种成员变量可以在同一个类的实例之间共享?
问题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; };
此外,还可以使用枚举来定义常量 。
相关文章推荐
- 【C/C++】类和结构
- C++中引用(&)的用法和应用实例===引用和多态的关系!!!!!!!!!!!!!!!!!
- 【C/C++】面向对象的基本概念
- 我的第一个C++程序
- 【C/C++】this指针
- DEV-C++
- 【C/C++】指针基本问题
- 【C/C++】运算符问题
- 作业《IOS_C语言》结构体、结构体数组
- LeetCode-Add Digits-解题报告
- C++名字空间详解
- C++名字空间详解
- 各种C++:Borland C++、Symantec C++、Microsoft VisualC++
- C语言中lseek()函数和fseek()函数的使用详解
- C语言中对文件最基本的读取和写入函数
- C语言中的输入输出函数详解与比较scanf,sscanf,printf,sprintf,fprintf
- 简要对比C语言中的dup()函数和dup2()函数
- CString简单介绍及使用
- 我理解的CPP
- 使用C语言操作文件的基本函数整理