类中的静态变量以及类与结构体的区别

1. 静态变量

今天总算弄了一点点贴图的程序了,想用顶点数组的方法来试试。记得前天晚上,做的一个试验不能跑出结果,今天才发现原来必须要用静态的类型呀,对这个方法的原理不了解导致的额。先说说关于静态变量这回事吧。

一开始,我想这样:

class NODE
{
public:
    static int a;
};
int main()
{
    NODE::a;
}

但这样会报链接错误:error LNK2001: 无法解析的外部符号 "public: static int NODE::a" (?a@NODE@@2HA)

那是因为静态变量必须要初始化,常量直接初始化就可以,变量需要这样初始化:

class NODE
{
public:
    static int a;
};
int NODE::a = 1;

尽管顶点数组的方法可以跑了,但是又有问题了,要是这样的话,那顶点数组都是放在静态全局区的(全局/静态存储区,全局变量和静态变量被分配到同一块内存中),也就是同一个类数据类型,共享一片数据区的,而我的程序中对于对象都希望有这样的顶点数组来快速调用的,看来又得想想别的办法了。

2. 类与结构体的区别

在CSDN上看到这样的帖子,又查了点东西,对这有了点了解,如下:

我们说的类与结构体的区别,一般指的是C++中的类与结构体的区别,要是说C中的结构体与C++中类的区别,那就大了,有C没有C++的时候,就没有面向对象的思想与机制,结构体不过是一个自定义的数据类型,把不同类型的数据放在了一起,没有继承、构造什么的,因此这两者是有很大的不同的。

常问的指的是C++中类与结构体的不同,C++中的结构体考虑的是向下兼容,兼容C中的结构体的作用,和C++的类不同体现在下面两点,除此之外,暂懂这些的就不好意思多说了。

  1. struct中的数据默认是public,而c++是private
  2. struct中默认的继承方式是public,而c++是private
原文地址:https://www.cnblogs.com/litstrong/p/1926558.html