静态成员变量和函数在内存所占大小?
class Student00{
public:
private:
};
class Student01{
public:
private:
int m_age;
};
class Student02{
public:
private:
int m_age;
string m_name;
};
class Student03{
public:
private:
int m_age;
string m_name;
static string m_identity;
};
class Student04{
public:
private:
int m_age;
string m_name;
static string m_identity;
static int m_total;
};
class Student05{
public:
Student05(int age, string name)
{
m_age = age;
m_name = name;
m_total++;
}
private:
int m_age;
string m_name;
static string m_identity;
static int m_total;
};
class Student06{
public:
Student06(int age, string name)
{
m_age = age;
m_name = name;
m_total++;
}
void showPrin() //非静态成员函数可以调用静态成员变量
{
cout << m_name << "今年" << m_age << "岁,是个" << m_identity << "!" << endl;
cout << "当前共有" << m_total << "名学生!" << endl;
}
private:
int m_age;
string m_name;
static string m_identity; //共享变量,表名学生身份
static int m_total; //统计学生人数
};
class Student07{
public:
Student07(int age, string name)
{
m_age = age;
m_name = name;
m_total++;
}
void showPrin() //非静态成员函数可以调用静态成员变量
{
cout << m_name << "今年" << m_age << "岁,是个" << m_identity << "!" << endl;
cout << "当前共有" << m_total << "名学生!" << endl;
}
static void printOut()
{
cout << "身份为:" << m_identity << endl;
}
private:
int m_age;
string m_name;
static string m_identity; //共享变量,表名学生身份
static int m_total; //统计学生人数
};
void test02()
{
cout << "没有成员变量时,所占内存:"<<sizeof(Student00) << endl; //1
cout << "一个int成员变量时,所占内存:" << sizeof(Student01) << endl; //4
cout << "一个int成员变量和一个string成员变量时,所占内存:" << sizeof(Student02) << endl; //32
cout << "一个int成员变量、一个string成员变量和一个静态成员变量时,所占内存:" << sizeof(Student03) << endl; //32
cout << "一个int成员变量、一个string成员变量和两个静态成员变量时,所占内存:" << sizeof(Student04) << endl; //32
cout << "一个int成员变量、一个string成员变量和两个静态成员变量,加一个构造函数,所占内存:" << sizeof(Student05) << endl; //32
cout << "一个int成员变量、一个string成员变量和两个静态成员变量,加一个构造函数、一个普通成员函数,所占内存:" << sizeof(Student06) << endl; //32
cout << "一个int成员变量、一个string成员变量和两个静态成员变量时,加一个构造函数、一个普通成员函数、一个静态成员函数,所占内存:" << sizeof(Student07) << endl; //32
}
总结:
静态成员函数和静态成员变量均不占内存空间。普通成员函数(包括构造函数)也不占内存空间。
一个类所占的内存空间,仅与其普通成员变量有关。
当有虚拟成员函数时,一个或多个都是仅增加4字节。