C++关于声明、定义、初始化的理解

声明和定义变量是如此的相识又如此的不同,如果未对其区分清楚,会对我们理解程序和语法带来困惑与不解,下面总结我的理解,如有异议请大家指正:

这里首先要区分几个概念:声明、定义、初始化。因为他们往往是同时出现的,但是他们确实是不同的概念。


1、对(除了类)的一般变量类型而言,只有在用extern 修饰的变量才是声明,无extern的一定是定义。


2、初始化即对变量赋初值,是对定义而言的,定义变量时,可以初始化,也可以不初始化。

而初始化又分为:①直接初始化,②复制初始化。(暂不提及)


3、加const修饰的定义,一定要初始化。


4、对于类,类的声明是一种类型,用它去定义对象,因此类是声明,对象是定义。


下午举个例子:

#include "Pub.h"

class Student
{
public:
  Student(BYTE byN, BYTE byS, BYTE byA):byNum(byN), byScore(byS), byAge(byA)
  {};
  void Total();
  static float Average();
private:
  BYTE byNum;
  BYTE byScore;
  BYTE byAge;
  static float bySum;
  static BYTE byCount;
};

void Student::Total()
{
  bySum += byScore;
  byCount++;
}
float Student::Average()
{
  return bySum/byCount;
}

float Student::bySum = 0;
BYTE Student::byCount = 0;


int main()
{
  Student stu[3] =  
  {
  Student(8,65,16),
  Student(9,70,16),
  Student(10,95,18)
  };
  BYTE byN = 0;
  BYTE byLoop = 0;
  cout << "Input the Num"<<endl;
  cin >> byN;
    
  for(byLoop = 0; byLoop < byN; byLoop++)
  {
  stu[byLoop].Total();
  }
  cout << "The" << byN << " students' average score is: " <<
  Student::Average();

return 0;
    
}

重点关注红色部分:

如果不加红色部分就会报
无法解析的外部符号 "private: static unsigned char Student::byCount"
无法解析的外部符号 "private: static float Student::bySum"

这是因为在类里的
static float bySum;
static BYTE byCount;
是声明不是定义


在类外时,就是定义了。

而且这是可以初始化也可不初始化。

所以把

float Student::bySum = 0;
BYTE Student::byCount = 0;
改为
float Student::bySum;
BYTE Student::byCount;

也是可以的。

因为“未对静态成员赋初值,编译系统会自动赋初值0”对所有定义了而为初始化的静态数据都成立。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值