类内数组声明,“类外”指定大小

类内数组声明,“类外”指定大小

  1. using namespace std;
  2. class Age{
  3. public:
  4. static const int Value = 10;
  5. static const int ages[];
  6. };
  7. const int Age::ages [] = {1,2,3};
  8. int main()
  9. {
  10. cout << "xxx Age:" << Age::Value <<
  11. "ages size:"<< sizeof(Age::ages)<< endl;
  12. }

首先说明:
1,c++可以在类的声明的时候指定值:但是是有条件的:static const 修饰。保证是class级别的,并且不可修改。
2, ages的声明是在类体内的,具体化是在外面的。为什么是可以对呢,而int的Value是不可以的,又是为什么呢。

谈谈我的认识:

1, static是class 级别的,所以只有一份在程序级别的栈中,所以我们对象可以有很多份,而static的只有一份。
2, 既然是clss 级别的,值如果是设置的初始值,就不能被其他对象修改,使用了const修饰,就可以使用::域操作来访问。
     如果不设置初始值,存储级别是class的, 访问级别就是对象级别的了.
3,
基本类型int不能像数组(指针)一样在类体外初始化,至于为什么,我猜测是基本类型是经过一步就完成了值和地址的确认,而复杂类型,比如说是数组(指
针),经过第一步只是确认了指针的值(所指位置)以及存储这个指针的地址,并没有初始化好分配多少内存,第二步确认分配的内。第一步在预编译完成,第二步
在编译阶段完成,有待验证。

时间: 2024-07-29 00:29:21

类内数组声明,“类外”指定大小的相关文章

字符串工具类、数组工具类、集合工具类、转型操作工具类、编码与解码操作工具类

package hjp.smart4j.framework.util; import org.apache.commons.lang3.StringUtils; /** * 字符串工具类 */ public final class StringUtil { /** * 字符串分隔符 */ public static final String SEPARATOR=String.valueOf((char)29); /** * 判断字符串是否为空 */ public static boolean i

Java中的日历类/集合类/数学类/正则表达式/数组工具类等的常用方法与基本功能

一. Arrays 针对数组操作的工具类,提供了一些针对数组排序和二分搜索的方法.常用方法:1.public static String toString(int[] a):将int类型的数组转换成字符串.转换成字符串后输出形式: ([元素1,元素2,元素3...]),Arrays在底层重写了toString方法.2.public static void sort(int[] a):对指定的 int 型数组按数字升序进行排序.3.public static int binarySearch(in

Java类对象数组声明和初始化

Java是纯面向对象语言.类是其重要构成单位. 然后,在实际编程中,我们会自己定义一些类,如Point <span style="font-size:14px;">public class Point { public Point(){ Lat=0.0; Lng=0.0; } public double GetLat(){ return Lat; } public double GetLng(){ return Lng; } public void SetLat(doubl

mfc 类对象数组

知识点 类对象数组定义 类对象数组初始化 一.类对象数组定义 我们声明类对象数组,与我们申明内置类型数组的形式完全相同. 如: int a[3]; float b[3]; Tdate d[3]; 二.类对象数组的初始化 1.调用默认构造函数,每个数组成员都会调用一次 如Tdate d[3] 则会调用3次构造函数. 2.手动初始化. 代码 #include "stdafx.h" #include <malloc.h> #include "date.h" i

Effective C++:条款43:学习处理模板化基类内的名称

(一) 注意从 "面向对象的C++" 转向 "模板C++" 时继承可能遭遇问题 :由于基类模板可能被特化,而该特化版本可能会改变成员,因此C++拒绝在模板化基类中寻找继承而来的名称. (二) 看下面的例子: 假设将信息传送到不同的公司去,传送方式包括明文传送和密文传送,采用模板类的设计方法: class CompanyA { public: ... void sendClearText(const string& msg); void sendEncrypt

Yii2 数组助手类arrayHelper

数组助手类 ArrayHelper 1.什么是数组助手类 Yii 数组助手类提供了额外的静态方法,让你更高效的处理数组. a.获取值(getValue) class User { public $name = 'Alex'; } $array = [ 'foo' => [ 'bar' => new User(),ddd ] ] 获取 name 的值 PHP 方法: $value = isset($array['foo']['bar']->name) ? $array['foo']['na

mustache 获取json数据内数组对象指定元素的方法

由于最近项目再用mustache,因此发现了这个问题,mustache无法获取json数据内数组键值的指定索引的元素 遂上网查资料总结一下两种方法 1,数据为数组对像 var obj = [{name: 'foo'}, {name: 'bar'}]; var tmp = '{{#1}}{{name}}{{/1}}'; console.log(Mustache.render(tmp, obj)); //bar 这种方法个人觉得有一定局限性 -----参照:http://stackoverflow.

学习处理模板化基类内的名称

1.从面向对象的C++转向模板C++时继承可能遭遇问题:由于基类模板可能被特化,而该特化版本肯可能会改变成员,因此C++拒绝在模板基类中寻找继承而来的名称 2.实例:假设信息传送到不同的公司去,传送方式包括明文传送和密文传送,采用模板类的设计方法: template<typename Company> class MsgSender{ public: ... void sendClear(const MsgInfo& info){ std::string msg; ... Compan

类、面向对象、类的继承

类: 它是用于描述"某一些具有共同特征"的物体的概念,是某一类物体的总称. 通常,一个类所具有的共同特征包括2大方面的信息: 外观,形状,描述,数据.....属性 行为,动作,功能........方法 举例子: 人类:动物类:鸟类 对象: 它是指一个具体的"物体",该物体隶属于某个"类别"(类). 通常,对象离不开类,没有类,就不能有对象. //创建类 class computer{ //定义属性 var $code ="c1"