大家讨论一下类成员初始化问题。

hityct1 2008-01-27 06:24:24
关于类成员初始化的问题:
使用vc7.0
以下是个小结,不知是否有错误或纰漏,请指正:

#include "stdafx.h"
#include <iostream>

using namespace std;

//一个普通类
class C1
{
public:
int m_var;//变量成员
const int m_const;//常量成员
static int m_static_var;//静态变量成员
static const int m_static_const=44;//静态常量成员;可以这样初始化,并且可以不用在类外定义一个空间;似乎不符合c++标准

C1():m_const(56)//常量成员必须在这初始化
{
cout<<"构造C1"<<endl;
m_var=34;//变量成员可在这初始化,也可在常量成员初始化的位置初始化
};
};
int C1::m_static_var = 22;//静态变量成员必须这样初始化
//const int C1::m_static_const=55;//静态常量成员可以这样初始化,但在类内不要再初始化了

int _tmain(int argc, _TCHAR* argv[])
{
C1 a;
cout<<"a.m_var="<<a.m_var<<endl;
cout<<"a.m_const="<<a.m_const<<endl;
cout<<"a.m_static_var="<<a.m_static_var<<endl;
cout<<"a.m_static_const="<<a.m_static_const<<endl;

return 0;
}


下一个例子和上一个差不错,只不过加了模版。

#include "stdafx.h"
#include <iostream>

using namespace std;

//一个模版类
template<int T>
class C1
{
public:
int m_var;//变量成员
const int m_const;//常量成员
static int m_static_var;//静态变量成员
static const int m_static_const=44;//静态常量成员;可以这样初始化,并且可以不用在类外定义一个空间;似乎不符合c++标准

C1():m_const(56)//常量成员必须在这初始化
{
cout<<"构造C1"<<endl;
m_var=34;//变量成员可在这初始化,也可在常量成员初始化的位置初始化
};
};

//int C1<T>::m_static_var = 22;//error!!!!!静态变量成员如何初始化?

int _tmain(int argc, _TCHAR* argv[])
{
C1<1> a;
cout<<"a.m_var="<<a.m_var<<endl;
cout<<"a.m_const="<<a.m_const<<endl;
//cout<<"a.m_static_var="<<a.m_static_var<<endl;
cout<<"a.m_static_const="<<a.m_static_const<<endl;

return 0;
}

这里有个问题了:模版类的静态变量成员如何初始化?
总不能这样吧:

#include "stdafx.h"
#include <iostream>

using namespace std;

//一个模版类
template<int T>
class C1
{
public:
int m_var;//变量成员
const int m_const;//常量成员
static int m_static_var;//静态变量成员
static const int m_static_const=44;//静态常量成员;可以这样初始化,并且可以不用在类外定义一个空间;似乎不符合c++标准

C1():m_const(56)//常量成员必须在这初始化
{
cout<<"构造C1"<<endl;
m_var=34;//变量成员可在这初始化,也可在常量成员初始化的位置初始化
};
};

//这么初始化静态变量成员
int C1<1>::m_static_var=22;
int C1<2>::m_static_var=22;


int _tmain(int argc, _TCHAR* argv[])
{
C1<1> a;
cout<<"a.m_var="<<a.m_var<<endl;
cout<<"a.m_const="<<a.m_const<<endl;
cout<<"a.m_static_var="<<a.m_static_var<<endl;
cout<<"a.m_static_const="<<a.m_static_const<<endl;

return 0;
}
...全文
183 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hityct1 2008-02-14
  • 打赏
  • 举报
回复
回答9楼:
<int T> 填入的是整数
<class T> 或 <typename T> 填入的是型别
snailman 2008-01-31
  • 打赏
  • 举报
回复
template <int T>
int C1 <T> ::m_static_var=22;
s039074 2008-01-30
  • 打赏
  • 举报
回复
template <int T>
class C1
{
......
};
弱弱的问一句:<int T> 可以么?
我还以为只可以<class T> 或<typename T>.
<int T> 和其他两个有什么区别?知道的,回答下:在此谢过。
cut9 2008-01-29
  • 打赏
  • 举报
回复
以上是 MinGW + eclipse 通过。
看出规律了吗.
cut9 2008-01-29
  • 打赏
  • 举报
回复
还有:

template <typename T>
class ClassA
{
public:
const int constInt;
static int staticInt;
static const int staticConstInt;

ClassA() : constInt(10)
{
}
};

template <typename T> int ClassA<T>::staticInt = 100;
template <typename T> const int ClassA<T>::staticConstInt = 200;




------------

int main()
{
ClassA<int> intObj;
ClassA<short> shortObj;
ClassA<double> doubleObj;

cout << intObj.staticConstInt << endl;
cout << shortObj.staticConstInt << endl;
cout << doubleObj.staticConstInt << endl;

}


cut9 2008-01-29
  • 打赏
  • 举报
回复
template <typename T>
class ClassA
{
public:
const int constInt;
static int staticInt;
static const int staticConstInt;

ClassA() : constInt(10)
{
}
};

template <typename T> int ClassA<T>::staticInt = 100;
template <typename T> const int ClassA<int>::staticConstInt = 101;
template <typename T> const int ClassA<short>::staticConstInt = 102;
template <typename T> const int ClassA<double>::staticConstInt = 103;

---------

int main()
{
ClassA<int> intObj;
ClassA<short> shortObj;
ClassA<double> doubleObj;

cout << intObj.staticConstInt << endl;
cout << shortObj.staticConstInt << endl;
cout << doubleObj.staticConstInt << endl;

}


hityct1 2008-01-29
  • 打赏
  • 举报
回复
看来我的智商为0
hong8292 2008-01-29
  • 打赏
  • 举报
回复
template <typename T>
int C1<T>::m_static_var = 22;//静态变量成员必须这样初始化
  • 打赏
  • 举报
回复
初始化方法看1楼
lin_style 2008-01-27
  • 打赏
  • 举报
回复
//int C1 <T> ::m_static_var = 22;//error!!!!!静态变量成员如何初始化?

STL不太懂
好象要为<T>前面再加一个名字空间吧。
不然不知道T类型

随便说的。。可以WS
ltc_mouse 2008-01-27
  • 打赏
  • 举报
回复
这样也可以吧:

template <int T>
int C1<T>::m_static_var=22;
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧