动态库和静态库的优缺点(动态库与静态库的区别)

动态库和静态库的优缺点(动态库与静态库的区别)p id 354S0PDG 1 什么是面向对象 p p id 354S0PDH 概念 Object Oriented Programming 缩写 OOP 是一种程序设计范型 同时也是一种程序开发的方法 p

大家好,我是讯享网,很高兴认识大家。




讯享网

 <p id="354S0PDG">1.什么是面向对象?</p><p id="354S0PDH">概念:(Object Oriented Programming,缩写:OOP)是一种程序设计范型,同时也是一种程序开发的方法。</p><p id="354S0PDI">对象指的是类的实例,将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F1104%2F79ef10c9j00smez29009cd000lh00hip.jpg&thumbnail=660x&quality=80&type=jpg"/><br/><br/></p><p id="354S0PDK">C++不是纯面向对象语言,而是基于面向对象的语言</p><p id="354S0PDL">(ps:因为它包含C的部分,C是面向过程)</p><p id="354S0PDM">面向对象三大特性:封装、继承、多态</p><p id="354S0PDN">2.类的大小?为什么要内存对齐?内存对齐的计算?空类的计算</p><p id="354S0PDO">①类的大小(是不是很疑惑,类肿么还有大小,不就是个类型嘛,纳尼)</p><p id="354S0PDP">是的类有大小,看个栗子:</p><p id="354S0PDQ">class Book { public: Book(); voidShow( ); private: charname[10]; intisbn; };</p><p id="354S0PDR">sizeof(Book);会是多少?</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F1104%2Ff2b7bce7j00smez1w000ld000iz00c7m.jpg&thumbnail=660x&quality=80&type=jpg"/><br/><br/></p><p id="354S0PDT">有没有算出来。</p><p id="354S0PDU">其实类和我们结构体一样是有大小的,而且类的内存对齐方式和结构体一样。</p><p id="354S0PDV">②为什么要内存对齐?</p><p id="354S0PE0">这个要说到操作系统上了,我们的cpu把内存当成是一块一块的,块的大小可以是2,4,8,16 个字节,因此CPU在读取内存的时候是一块一块进行读取的,块的大小称为(memory granularity)内存读取粒度。</p><p id="354S0PE1">为什么要分块呢?(分块读取有利于提高内存访问效率)</p><p id="354S0PE2">和内存对齐有什么关系?</p><p id="354S0PE3">假设CPU要读取一个4字节大小的数据到寄存器中(假设内存读取粒度是4),分两种情况讨论:</p><p id="354S0PE4">1.数据从0字节开始</p><p id="354S0PE5">2化,必须用一个公有成员函数来进行。同时这个函数应该有且仅在定义对象时自动执行一次,这时调用的函数称为构造函数(constructor) 。</p><p id="354S0PE6">构造函数是特殊的成员函数,其特征如图:</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F1104%2F7a4cbcecj00smez1w000fd000il0076m.jpg&thumbnail=660x&quality=80&type=jpg"/><br/><br/></p><p id="354S0PE8">构造函数基本我们都使用全缺省的重载函数。</p><p id="354S0PE9">2)拷贝构造函数:</p><p id="354S0PEA">创建对象时使用同类对象来进行初始化,这时所用的构造函数称为拷贝构造函数(Copy Constructor),拷贝构造函数是特殊的构造函数。</p><p id="354S0PEB">来个例子:</p><p id="354S0PEC">class Book { public: Book( ); Book( intisbn = 0x00, char*name = "图书"); private: intisbn; char*name; }; intmain( ) { Book b( ); Book b1(b); //这里使用了拷贝构造system( "pause"); return0; }</p><p id="354S0PED">特征:</p><p id="354S0PEE">☛拷贝构造函数其实是一个构造函数的重载。</p><p id="354S0PEF">☛拷贝构造函数的参数必须使用引用传参,使用传值方式会引发无穷递归调用。(思考为什么?)</p><p id="354S0PEG">☛若未显示定义,系统会默认缺省的拷贝构造函数。缺省的拷贝构造函数会,依次拷贝类成员进行初始化。</p><p id="354S0PEH">一般情况下我们会使用系统默认的拷贝构造函数,但是在特殊情况下需要显示定义(比如链表的拷贝构造)</p><p id="354S0PEI">3)析构函数</p><p id="354S0PEJ">当一个对象的生命周期结束时,C++编译系统会自动调用一个成员函数,这个特殊的成员函数即析构函数(destructor)</p><p id="354S0PEK">构造函数是特殊的成员函数,其特征如下:</p><p id="354S0PEL">☛析构函数在类名加上字符~。</p><p id="354S0PEM">☛析构函数无参数无返回值。</p><p id="354S0PEN">☛一个类有且只有一个析构函数。若未显示定义,系统会自动生成缺省的析构函数。</p><p id="354S0PEO">☛对象生命周期结束时,C++编译系统系统自动调用析构函数。</p><p id="354S0PEP">☛注意析构函数体内并不是删除对象,而是做一些清理工作。(怎么理解这里的清理工作?参看下面的代码)</p><p id="354S0PEQ">class Date { public: // 析构函数 ~ Date() {} private: int_year ; int_month ; int_day ; }; class Array { public: Array( intsize) { _ptr = ( int*)malloc( size* sizeof( int)); } // 这里的析构函数需要完成清(shi)理(fang)工(kong)作(jian)。~ Array () { if(_ptr ) { free(_ptr ); _ptr = 0; } } private: int* _ptr ; };</p><p id="354S0PER">4)赋值操作符重载</p><p id="354S0PES">为了增强程序的可读性,C++支持运算符重载。</p><p id="354S0PET">运算符重载特征:</p><p id="354S0PEU">☛operator+ 合法的运算符 构成函数名(重载&lt;运算符的函数名:operator&lt; )。</p><p id="354S0PEV">☛重载运算符以后,不能改变运算符的优先级/结合性/操作数个数。</p><p id="354S0PF0">5个C++不能重载的运算符: .*/::/sizeof/?:/.</p><p id="354S0PF1">5)取地址操作符重载</p><p id="354S0PF2">class Date { public: Date* operator&amp;() { returnthis; } constDate * operator&amp;() const{ returnthis; } private: int_year ; // 年int_month ; // 月int_day ; // 日};</p><p id="354S0PF3">6)const修饰的取地址操作符函数</p><p id="354S0PF4">在成员函数后面加const,const修饰this指针所指向的对象,也就是保证调用这个const成员函数的对象在函数内不会被改变。</p><p id="354S0PF5">classDate { public: voidDisplay () { cout&lt;&lt; "Display ()"&lt;</p><p id="354S0PF6">后两个成员函数用的很少。</p> 

讯享网
小讯
上一篇 2025-04-22 21:57
下一篇 2025-04-22 07:55

相关推荐

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