通过类1给类2的变量赋值,要把类2需要赋值的变量声明在public,加static关键字,声明为静态成员变量。
在类2的cpp文件中,在类的外部(必要)给静态成员变量赋初值。
在类1中通过:类型名 类2::成员变量进行赋值操作。
ps:接收网络数据流unsigned char可以赋值给int型变量
而int型变量可以通过to_string(int变量)转换成string型。
static、const 和 static const 类型成员变量声明以及初始化
const 定义的常量在超出其作用域之后其空间会被释放,而 static 定义的静态常量在函数执行后不会释放其存储空间。
static 表示的是静态的。类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员变量。一般类的静态函数几乎就是一个全局函数,只不过它的作用域限于包含它的文件中。
在 C++ 中,static 静态成员变量不能在类的内部初始化。在类的内部只是声明,定义必须在类定义体的外部,通常在类的实现文件中初始化。
在 C++ 中,const 成员变量也不能在类定义处初始化,只能通过构造函数初始化列表进行,并且必须有构造函数。
const 数据成员 只在某个对象生存期内是常量,而对于整个类而言却是可变的。
//-----------------Test.h----------------------------
#pragma once
class Test
{
private :
int putong;//普通变量
// int putong= 1; 错误的初始化方法
const int changliang ;//常量
// const int changliang =1; 常量的错误初始化方法
static int jingtai;//静态成员变量
// static int jingtai=1; 错误,只有静态常量int成员才能直接赋值来初始化
static const int jingtaichangliang1=1; //正确,静态常量成员可以直接初始化
static const int jingtaichangliang2;
public:
Test(void);
~Test(void);
};
//--------------------Test.cpp-----------------------------------
#include ".\test.h"
int Test::jingtai = 1; //静态成员的正确的初始化方法
// int Test::putong = 1; 错误,静态成员才能初始化
// int Test::changliang = 1; 错误
// int Test::jingtaichangliang2 = 1; // 错误的方法,提示重定义
Test::Test(void):putong (1),changliang(1)正确的初始化方法//jingtai(1)不能在这里初始化
{
putong =1; //正确, 普通变量也可以在这里初始化
//changliang = 1; 错误,因为常量不能赋值,只能在 "constructor initializer (构造函数的初始化列表)" 那里初始化
jingtai =1; //这个赋值是正确的,改变静态成员变量的值。
}
a. 常量型成员变量 b. 引用型成员变量 c. 静态成员变量 d. 整型静态常量成员变量 e. 非整型静态常量成员变量
#include <iostream>
using namespace std;
class BClass
{
public:
BClass() : i(1),ci(2), ri(i) // 对于常量型成员变量和引用型成员变量,必须通过参数化列表的方式进行初始化。在构造函数体内进行赋值的方式,是行不通的。
{
}
void print_values()
{
cout<< "i =\t" << i << endl;
cout<< "ci =\t" << ci << endl;
cout<< "ri =\t" << ri << endl;
cout<< "si =\t" << si << endl;
cout<< "csi =\t" << csi << endl;
cout<< "csi2 =\t" << csi2 << endl;
cout<< "csd =\t" << csd << endl;
}
private:
int i; // 普通成员变量
const int ci; // 常量成员变量
int &ri; // 引用成员变量
static int si; // 静态成员变量
//static int si2 = 100; // error: 只有静态常量成员变量,才可以这样初始化
static const int csi; // 静态常量成员变量
static const int csi2 = 100; // 静态常量成员变量的初始化(Integral type) (1)
static const double csd; // 静态常量成员变量(non-Integral type)
//static const double csd2 = 99.9; // error: 只有静态常量整型数据成员才可以在类中初始化
};
// 静态成员变量的初始化(Integral type)
int BClass::si = 0;
// 静态常量成员变量的初始化(Integral type)
const int BClass::csi = 1;
// 静态常量成员变量的初始化(non-Integral type)
const double BClass::csd = 99.9;
可见派生类与基类共用静态数据成员。
静态数据成员可以成为成员函数的可选参数,而普通数据成员则不可以。
静态数据成员的类型可以是所属类的类型,而普通数据成员则不可以。普通数据成员的只能声明为所属类类型的指针或引用。