只能被实例化一次的类

来源:互联网 发布:2016年餐饮行业数据 编辑:程序博客网 时间:2024/05/18 01:14
<code class="hljs cpp has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># include <iostream></span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># include <string></span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">using</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">namespace</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">std</span>;</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

1.创建类

<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">class Student{<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span>:    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> Student* <span class="hljs-title" style="box-sizing: border-box;">Limit</span>();  <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//静态成员函数</span>    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> display();<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span>:    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> Student *total;    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//静态数据成员指针</span>    Student(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">string</span> ,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>);    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">string</span> name;    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> age;};</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li></ul>

2.类外实现

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//初始化静态成员数据</span>Student<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span> Student<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::total</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NULL</span>;Student<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::Student</span>(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">string</span> nam <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"0"</span>,int ag <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>){    name <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> nam;    age <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> ag;}Student<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span> Student<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::Limit</span>()           <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//功能:只能通过此函数调用构造函数进行初始化,然后返回唯一对象地址</span>{                    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//定义bool类型的b为了实现 total = new student();只运行一次, </span>                    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//大概过程:(要记住 "b是静态成员" )</span>                    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 1)主函数创建第一个对象</span>                    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//   b = false(满足条件进入IF)-> b = true 执行创建对象语句-></span>                    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//   return对象地址total</span>                    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 2)主函数创建第二个对象</span>                    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//   b = true (不满足IF条件,不进入IF)不会创建新的对象,->return</span>                    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//   对象地址total(total不变同变量b一个性质)</span>                    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 所以无论主函数怎样创建对象都是将第一次创建的对象的地址返回给主函数</span>   static bool b <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">false</span>;       <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (b <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">false</span>)       {                                       b <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">true</span>;           total <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">new</span> Student();       }       <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> total;}<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">void</span> Student<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::display</span>(){    cout<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><<</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"名字:"</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><<</span>name<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><<</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"\n年龄:"</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><<</span>age<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><<</span>endl;}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li></ul>

3.程序入口

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">int main(){    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//Student m("ss",12);          //不可访问,构造函数为私有成员函数</span>    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//m.display();</span>    Student<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span> a <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> Student<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::Limit</span>(); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//只能通过调用公有的静态成员函数来创建对象,返回对象的存储地址</span>    a<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>display();    Student<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span> b <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> Student<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;">::Limit</span>(); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//不是创建新的对象而是将指针b指向原有对象(a指向的对象)</span>    b<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>display();}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul>

4.讲解 
根据上面这段代码,要想在程序中只许创建一个Student类对象,调用静态成员函数Limit()即可。 
例如:

Student MyObj(“ss”,12); // 编译出错 - 因为构造函数是 private

// 获得指向类对象指针的正确方法 
Student* pMyObj1 = Student::Limit();

// 下面的语句不会创建新的类对象,它所创建的对象指针pMyObj2与上面创建的pMyObj1指针是一样的, 
// 也就是说pMyObj1和pMyObj2所指的对象是一样的

Student* pMyObj2 = Student::Limit();

/****************************************分割线(2015.10.19)*************************************/

5.简化版(增强版) 
1.将类类型的指针是否为空作为判断条件 
2.解决销毁对象之后不能创建对象问题,设置析构函数将 total初始化为NULL;上面的那个程序对应将bool类型的值 true转为false ,false转为true 
3.解决拷贝构造函数创建对象的问题 
若主函数通过以下方式来实例化对象,会报错,拷贝构造函数为私有,不能访问

    Student c(*a);              /通过拷贝构造函数创建对象。这样会报错    c.display();
<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">class Student{<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span>:    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> Student* <span class="hljs-title" style="box-sizing: border-box;">Limit</span>();     ~Student();             <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//   增加之处 </span>    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> display();<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span>:    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> Student *total;      Student(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">string</span> ,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>);    Student(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> Student &a());  <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 3.增加之处</span>    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">string</span> name;    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> age;};Student* Student::total = NULL;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//   1.增加之处</span>Student::~Student(){    total = NULL;}Student::Student(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">string</span> nam = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"0"</span>,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> ag = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>){    name = nam;    age = ag;}Student* Student::Limit()       <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//    2.更改之处,改为用指针是否为空作为判断条件比上一个更好理解</span>    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (NULL == total)       {                                       total = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Student();       }       <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> total;}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> Student::display(){    cout<<<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"名字:"</span><<name<<<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"\n年龄:"</span><<age<<endl;}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li></ul>

PS:可以通过this指针来检验是否只能实例化一个对象

<code class="hljs cpp has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> Student::display(){    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">cout</span><<<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"名字:"</span><<name<<<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"\n年龄:"</span><<age<<endl;    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">cout</span><<<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span><<endl;   <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//打印this指针</span>}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>

结果:

<code class="hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">        名字:0        年龄:0        00419488        名字:0        年龄:0        00419488</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>

主函数创建的“两个对象”存储地址是完全一致的,所以实质只实例化了一个对象

0 0