【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
- 【C/C++】成员变量
- [C++]static成员变量
- c++--静态成员变量
- 局部变量和成员变量(C#)
- static c ,C++类static 成员变量
- static c ,C++类static 成员变量
- objective-c没有类静态成员变量
- c++:类中成员变量是引用
- static C,C++类static 成员变量
- Objective-C成员变量的作用域
- objective-c 成员变量的作用域
- Objective-C - 成员变量作用域
- Objective-C类成员变量深度剖析
- Objective-c的成员变量访问权限
- C++_类成员变量指针
- object-c面向对象-成员变量
- Objective-C类成员变量深度剖析
- Objective-C成员变量声明方式探究
- CodeForces 288A
- Android四大组件之Activity
- 多线程
- 在VS2013中配置OpenGL及所需库文件下载
- 【C/C++】类和结构
- 【C/C++】成员变量
- 基类
- 【C/C++】构造函数和析构函数
- 【C/C++】拷贝构造函数和赋值函数
- leetcode Roman to Integer java基本编程学习(四)
- Oracle Client+ PLSQL developer实现远程连接Oracle数据库
- 【C/C++】多态的概念
- java基本I/O系列--PipedOutputStream和PipedInputStream
- C++函数的返回值——返回引用类型&非引用类型