
<br> <p> 1.比较特殊的成员类型:protected.</p><p> 保护成员在本类中和private类型的成员作用一模一样。区别在于保护成员可以由本类的派生类的成员函数访问,但是私有成员在其派生类中无法访问。</p><p> 2.成员函数的定义</p><p> 成员函数如果在类外定义,那么函数声明的参数表可以只写参数类型,但是在类外定义时必须给出参数名。</p><p> 3.内联成员函数</p><p> (1)隐式定义内联成员函数</p><p> 直接在类内定义的成员函数 </p><p> (2)显式定义内联成员函数</p><p> 用关键字inline声明(在声明和定义的语句句子开头加inline),此时可以在类内声明,类外定义。声明、定义都要在句首加inline.</p><p> (3)内联函数</p><p> 内联函数的代码会在编译时插入到每一个调用它的地方。这种做法会提高运行效率。但是只有很简短的代码才实用。</p><br><p> 1.对象成员的访问方式:</p><p> 例如对对象d中成员year的访问</p><p> d.year (*p).year p->year</p><p> 2.对象的初始化</p><p> (1)</p><br><p> (2)用构造函数(作用:为对象分配空间,进行初始化)</p><p>例如:</p><br><p> 注意:1.构造函数也可以重载。但是调用无参的构造函数时应该 complex A,不能complex A()</p><p> 2.定义构造函数后,系统将不再提供默认构造函数。所以对于带参数的构造函数,在定义对象时必须给构造函数的形参传值,否则构造函数将不会被执行。</p><p> 3.but...构造函数可以设置默认参数解决这个问题,例:complex(int a=0,int b=0) 在定义对象时如果complex A;</p><p> 此时默认值和形参结合,不会出现 2 的情况。注意默认参数必须在构造函数声明时设定。一个程序只能设置一个默认构造函数。:complex(int a=0,int b=0)和complex()只能有一个,不然执行complex A;时会出错。</p><p>一般不要同时使用函数的重载和有默认参数的构造函数:complex(int a=0,int b=0);complex(int a);complex s(1)此时会出现二义性。 </p><p> 4.与构造函数对应的有析构函数。没有参数,不能被重载,且一个类只能有一个析构函数。</p><p> </p><p> (3)成员初始化列表</p><p> 这种方法不在函数体内用赋值语句进行初始化,而是在函数首部实现的</p><p> 接着上面的例子:...</p><br><p> 注意:数据成员是按照在类中声明的顺序初始化的,和在成员列表中的排列顺序无关。</p><p> const修饰的和引用类型的数据成员都不能用构造函数直接初始化,只能用成员初始化列表。因为const修饰的数据只能初始化,不能赋值,构造函数中赋值的过程;</p><p> 优点:主要是性能问题,对于内置类型,如int, float等,使用初始化类表和在构造函数体内初始化差别不是很大,但是对于类类型来说,最好使用初始化列表,为什么呢?使用初始化列表少了一次调用默认构造函数的过程,这对于数据密集型的类来说,是非常高效的。</p><p> </p><br><p> 1.对象数组:complex A[3]={</p><p> complex(1,1),complex(2,1),complex(2,3)};</p><p> 2.对象指针:指向对象的指针也可以指向对象数组。</p><p> 3.this指针</p><p> 每当创建一个对象的时候,系统就把this指针初始化为指向该对象,即this指针的值是当前调用成员函数的对象的首地址。</p><p> 例如:执行A.show()就相当于this->show()</p><br><p> 1.string在C++标注库中已经声明,可以直接定义string类的对象。使用string类对象是程序开头必须加上#include<string></p><p> 2.初始化 string str1("china")或者string str1="china"都可以。</p><p> 3.使用string类可以直接进行基本的运算。</p><br><div border="1" cellspacing="1" cellpadding="1"><br><tbody><br><tr><br><td>s1=s2</td><br><td>赋值</td><br></tr><br><tr><br><td>s1+=s2</td><br><td>s1=s1+s2</td><br></tr><br><tr><br><td>s1+s2</td><br><td>合成新串</td><br></tr><br><tr><br><td>s1==s2</td><br><td>判断</td><br></tr><br><tr><br><td>s1!=s2</td><br><td>判断</td><br></tr><br><tr><br><td>s1<(>>=<=)s2</td><br><td>判断</td><br></tr><br><tr><br><td>s1[i]</td><br><td>访问字符串对象s1中下标为 i 的字符</td><br></tr><br><tr><br><td>cin>>s1</td><br><td>输入输出</td><br></tr><br></tbody><br></div><br><p> 1.对象,对象指针,对象引用都可以作为函数的参数。区别如下:</p><br><div border="1" cellspacing="1" cellpadding="1" align="center"><caption>对象作为函数参数的三种形式</caption><br><tbody><br><tr><br><td>对象</td><br><td>传值调用传递给函数,单行传递,只由实参传递给形参,而不能由形参传回给实参。即在此函数中一定不会影响实参本身。</td><br></tr><br><tr><br><td>对象指针</td><br><td>传址调用,实参形参对象指针都指向同意对象</td><br></tr><br><tr><br><td>对象引用</td><br><td>也可以改变实参</td><br></tr><br></tbody><br></div><p> 跟基本变量做参数的传递规则相同。</p><br><p> 1.作用:在建立一个新对象时,使用一个已经存在的对象去初始化新对象。</p><p> 2.特点:</p><p> (1)只有一个参数,并且时同类对象的引用。</p><p> (2)可以自定义,如果自定义,系统会自动生成一个默认拷贝构造函数。</p><p> 3.拷贝构造函数的定义,调用用一个例子说明:</p><br><p> 注意:在通常情况下拷贝构造函数能胜任,但如果类中有指针类型时,调用时可能会产生错误。</p><p> 4.调用拷贝构造函数的三种情况(普通构造函数在对象被创建时候调用)</p><p> (1)当用类的一个对象去初始化了另一个对象时</p><p> (2)当函数的形参是对象时,实参和形参相结合的时候</p><p> (3)但函数的返回值是类的对象。在函数调用完毕,形参对象带回时,此时会调用拷贝构造函数,将此对象赋值给一个临时对象并传到该函数的调用出。//也就是说如果自定义了拷贝构造函数此时返回的对象要小心了。。。</p><br><p> 1.目的:实现一个类的多个对象之间数据共享。</p><p> 2.静态成员属于类不属于某个对象,在任何对象建立之前就已经存在。</p><p> 3.用一个例子说明静态数据成员的定义,初始化和调用。</p><br><p> 4.静态成员的其他知识点</p><p> (1)一般情况下静态成员函数用来访问静态数据成员,当一定要访问非静态成员时必须通过对象名访问。 </p><p> (2)静态成员函数没有this指针。</p><p> (3)静态数据成员的使用目的:在建立对象前访问静态数据成员;系统将静态成员函数设置为内部连接,和先行文件链接的其它文件中的同名函数不会和该函数发生冲突,可以维护该函数的安全性。</p><br><p><strong> 1.友元函数</strong></p><p><strong> 作用:</strong>使得不属于该类的函数可以访问该类的成员。完成一个函数访问多个类的任务。</p><p> <strong>定义: </strong>就是普通函数,该怎么定义还怎么定义,只不过要在类中声明。形式:friend+正常的声明形式;</p><p> 一个类的成员函数也可以定义为另一个类的友元函数;在另一个类声明时句首加friend即可。</p><p> <strong>特殊点: </strong>参数必须是对象名(对象引用等等)。因为他不是类的成员,不能直接访问对象的数据。</p><p> <strong>2.友元类</strong></p><p><strong> </strong> <strong>实质:</strong>当一个类声明为另一个类的友元类,该类的虽有成员函数都是另一个类的友元函数。</p><p> <strong> 特点: </strong>单向并且不可传递</p><p> <strong>使用方式: </strong> 作为友元类的类,在另一个类中声明 friend+友元类名 即可</p><p> <strong> 3.对象成员: </strong>对象也可以作为一个类的成员。和一般变量的定义方法相同。不过有对象成员的类的构造函数定义有所变化,</p><p> 定义时首句后面要加:对象成员的构造函数(类似成员初始化列表)线调用对象成员的构造函数,再调用类的构造函数。如果在类外定义,声明时不用加:对象成员的构造函数 。在定义有对象成员的类时,要先定义好作为成员的对象。</p><br><p> <strong>作用:</strong>保证数据共享又防止数据被改动。实际应用中,常用常引用作为参数。用const修饰,实参函数内保护能改变,函数外却可以。</p><p> <strong>常对象: </strong>数据成员在整个生存期内不允许改变,定义时必须初始化。C++不允许常对象调用普通的成员函数,为了确保不改变数据,只能调用常成员函数。</p><p><strong> 说明形式:</strong> 类名 const 对象名[参数表]; const 类名 对象名[参数表];</p><p> <strong>常数据成员: </strong>定义时句首加const的数据成员。构造函数只能通过成员初始化列表对其进行初始化。其他任何函数都不能对其赋值。不同对象中的常数据成员可以不同。</p><p> <strong> 常成员函数: </strong>在该函数中一定不会影响数据成员的值。关键字const也可以用来区分函数重载。</p><p> <strong>定义和声明: </strong>定义和声明时都必须在句末加const,调用时不用加。</p><p> <strong> 特性: </strong>常成员函数可以访问常数据成员也可以访问普通数据成员.(反正都不会改变) ;</p><p> 常数据成员既可以被常成员函数访问也可以被一般成员访问。(反正不会变);</p><p> 常对象的数据成员只能够被常成员函数访问;</p><p> 为了确保常成员函数不改变数据成员的值,不能调用类中的普通成员函数。</p><p> </p><p> <br>
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/183707.html