`
yanlijun250
  • 浏览: 752619 次
文章分类
社区版块
存档分类
最新评论

CPP复习总结

 
阅读更多

CPP复习总结

1.<wbr><wbr><wbr><wbr><wbr><wbr> Cstring<wbr> strstr strlwr strupr</wbr></wbr></wbr></wbr></wbr></wbr></wbr>

2.<wbr><wbr><wbr><wbr><wbr><wbr> 调用复制构造函数的几种情况①一个新对象被另一个已经存在的同类型对象用以初始化②当一个对象作为实参传递给函数形参时要调用复制构造函数,函数返回时自动调用其析构函数③在函数返回一个对象时调用复制构造函数。</wbr></wbr></wbr></wbr></wbr></wbr>

3.<wbr><wbr><wbr><wbr><wbr><wbr> 静态数据成员初始化:&lt;数据类型&gt;&lt;类名&gt;::&lt;静态变量&gt;=初始化数值 。 静态成员函数不能访问非静态数据成员。静态函数没有this指针。</wbr></wbr></wbr></wbr></wbr></wbr>

4.<wbr><wbr><wbr><wbr><wbr><wbr> 常对象成员①const是函数类型的一个组成部分,因此在实现部分也要带上const②常成员函数不能更新对象的数据成员,也不能调用该类中没有用const修士的成员函数。③如果讲一个对象说明为常对象,则通过该对象只能调用它的常成员函数,不能调用其他的成员函数。④const关键字可以参与区分重载函数。⑤常成员数据只能在构造函数初始化列表中对其初始化。</wbr></wbr></wbr></wbr></wbr></wbr>

5.<wbr><wbr><wbr><wbr><wbr><wbr> 声明友元:只需要在类中任何位置添加声明即可①friend &lt;数据类型&gt; &lt;友元函数名&gt; (形参表) ;② friend class &lt;类名&gt;</wbr></wbr></wbr></wbr></wbr></wbr>

6.<wbr><wbr><wbr><wbr><wbr><wbr> c++不允许初始化一个对象数组。</wbr></wbr></wbr></wbr></wbr></wbr>

7.<wbr><wbr><wbr><wbr><wbr><wbr> 构造函数调用次序①虚基类的构造函数②积累的构造函数③派生类中成员对象的构造函数④派生类的构造函数。 &lt;派生类名&gt;::&lt;派生类名&gt;(&lt;总参数表&gt;):&lt;基类名&gt;(&lt;参数表1&gt;),&lt;基类名&gt;(&lt;参数表2&gt;)……&lt;基类名&gt;(&lt;参数表n&gt;),&lt;成员对象名&gt;(&lt;参数表n+1&gt;),&lt;成员对象名&gt;(&lt;参数表n+2&gt;)……&lt;成员对象名&gt;(&lt;参数表n+m&gt;){构造函数体}</wbr></wbr></wbr></wbr></wbr></wbr>

8.<wbr><wbr><wbr><wbr><wbr><wbr> 虚继承。Class&lt;类名&gt;:virtual &lt;继承方式&gt;&lt;基类名&gt; 引入虚基类后,无论该虚基类被继承多少次,在最终的派生类中都只有它的一份备份。</wbr></wbr></wbr></wbr></wbr></wbr>

9.<wbr><wbr><wbr><wbr><wbr><wbr> 纯虚函数和抽象类: virtual &lt;类型&gt;&lt;函数名&gt;(&lt;参数表&gt;) = 0 ; 拥有纯虚函数的类就是抽象类,抽象类不能残生类得实例。</wbr></wbr></wbr></wbr></wbr></wbr>

10.<wbr><wbr> 一个类的对象可以作为另一个类的成员,一个类的对象不能作为在自身类的成员,一个类的指针或引用可以作为自身类的成员</wbr></wbr>

11.<wbr><wbr> 局部类:定义在函数体内的类叫局部类。嵌套类:在一个类中定义的类称为嵌套类;</wbr></wbr>

12.<wbr><wbr> 什么是虚继承:就是当有菱形继承的时候,只保存基类的一个副本。</wbr></wbr>

13.<wbr><wbr> 定位new:X *p = new<wbr> (buf)X; new = malloc + 构造函数</wbr></wbr></wbr>

14.<wbr><wbr> 拷贝构造函数&lt;类名&gt;::&lt;类名&gt;(const &lt;类名&gt;&amp;&lt;引用名&gt; ).</wbr></wbr>

15.<wbr><wbr> 直接用拷贝构造函数要比用赋值的方式在效率上高很多。因为赋值的方式要先调用构造函数,再调用赋值函数。Ctest B= A //类的拷贝构造</wbr></wbr>

16.<wbr><wbr> Ctest C ; C = A ; //类的赋值<wbr> Ctest D(A) //类的拷贝构造</wbr></wbr></wbr>

17.<wbr><wbr> “成员初始化表”比“成员赋值”更优,因为前者调用的是类的拷贝构造函数,后者调用的是类的赋值操作。</wbr></wbr>

18.<wbr><wbr> 继承的二义性,需要用::操作符来确定调用的是那个父类的函数</wbr></wbr>

19.<wbr><wbr> 栈:通常是用于那些在编译期间就能确定存储大小的存储区,用于在函数作用域内创建,在离开作用域后自动销毁的变量的存储区。堆:通常用于那些再编译期间不能确定存储大小的变量存储区,由malloc分配,free释放。常量存储区,全局、静态的存储区通常用于那些再编译期间就能确定存储大小的存储区,在整个程序运行期间都可见。</wbr></wbr>

20.<wbr>预处理:文件包含,宏替换,条件编译,布局控制。#progma once能保证头文件被编译一次。</wbr>

21.<wbr>inline函数的好处:节省函数调用,参数传递,控制权转移等开销。Extern“C”就是告诉编译器用c语言的规则去编译调用函数。</wbr>

22.<wbr><wbr> 定位new。(不分配内存)在已经分配了的内存上再来构建类对象。</wbr></wbr>

如:char *buf =new char[1024];

X *p = new (buf) X;

<wbr></wbr>

#include<stdio.h>

#include<iostream>

#include<vector>

#include<string>

#include<algorithm>

using namespace std;

<wbr></wbr>

int main(){

<wbr><wbr><wbr><wbr> vector&lt;int &gt; v(15,13) ;</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr> for(int i = 0 ; i &lt; 10 ; i++)</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> v[i] = i*i;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr><wbr> for(vector&lt;int&gt;::iterator ix = v.begin() ; ix!= v.end() ; ix++)</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> cout &lt;&lt; *ix &lt;&lt; "\t" ;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr> cout &lt;&lt; endl ;</wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr><wbr> cout &lt;&lt; "v.size() = " &lt;&lt; v.size() &lt;&lt; endl ;</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr> cout &lt;&lt; "v.capacity()=" &lt;&lt; v.capacity() &lt;&lt; endl ;</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr> cout &lt;&lt; "v.empty() = " &lt;&lt; v.empty() &lt;&lt; endl;</wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> sort(v.begin() , v.end());</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> cout &lt;&lt; "after sort " &lt;&lt; endl ;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> for(vector&lt;int&gt;::iterator ix = v.begin() ; ix!= v.end() ; ix++)</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> cout &lt;&lt; *ix &lt;&lt; "\t" ;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr> cout &lt;&lt; endl ;</wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> v.erase(v.begin() +5 ,v.begin()+10);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> cout &lt;&lt; "after erase !" &lt;&lt; endl ;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> for(vector&lt;int&gt;::iterator ix = v.begin() ; ix!= v.end() ; ix++)</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> cout &lt;&lt; *ix &lt;&lt; "\t" ;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> cout &lt;&lt; endl ;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> cout &lt;&lt; "after reverse" &lt;&lt; endl ;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> reverse(v.begin() , v.end());</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> for(vector&lt;int&gt;::iterator ix = v.begin() ; ix!= v.end() ; ix++)</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> cout &lt;&lt; *ix &lt;&lt; "\t" ;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> cout &lt;&lt; endl ;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr></wbr>

}

<wbr></wbr>

#include<stdio.h>

#include<iostream>

#include<vector>

#include<string>

#include<algorithm>

using namespace std;

<wbr></wbr>

int main(){

<wbr><wbr><wbr><wbr> char temp[100];</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr> string stemp ;</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr> vector&lt;string&gt; v;</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr> printf("please input a string , and input a '#' as the signal of end\n");</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr> scanf("%s",temp);</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr> while(temp[0]!='#')</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr> {</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> stemp = temp ;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> v.push_back(stemp);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> scanf("%s",temp);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr> }</wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr><wbr> for(vector&lt;string&gt;::iterator ix = v.begin() ; ix!= v.end() ; ix++)</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> cout &lt;&lt; *ix &lt;&lt; "\t" ;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr> cout &lt;&lt; endl ;</wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr><wbr> reverse(v.begin()<wbr> , v.end());</wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr> for(vector&lt;string&gt;::iterator ix = v.begin() ; ix!= v.end() ; ix++)</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> cout &lt;&lt; *ix &lt;&lt; "\t" ;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr> cout &lt;&lt; endl ;</wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr><wbr> sort(v.begin()<wbr> , v.end());</wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr> for(vector&lt;string&gt;::iterator ix = v.begin() ; ix!= v.end() ; ix++)</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> cout &lt;&lt; *ix &lt;&lt; "\t" ;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr> cout &lt;&lt; endl ;</wbr></wbr></wbr></wbr>

}

<wbr></wbr>

String:

已知string的原型为:

Class String {

<wbr><wbr><wbr><wbr><wbr><wbr> Public:</wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> String ( const char *str );</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> String(const String &amp;s);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> ~String();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> String &amp; oprator = (const String &amp;s );</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr> Private:</wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr> Char *m_data;</wbr></wbr></wbr></wbr></wbr></wbr>

};

String::String(const char *str){

<wbr><wbr><wbr><wbr><wbr><wbr> If(str){</wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr> M_data = new char[strlen(p)+1];</wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr> Strcpy(M_data ,str);</wbr></wbr></wbr></wbr></wbr></wbr>

}

Else

{

M_data = new char[1];

*M_data =’\0’;

}

}

String::~String(void){

<wbr><wbr><wbr><wbr><wbr><wbr> Delete [] m_data;</wbr></wbr></wbr></wbr></wbr></wbr>

}

String::String(const String &other){

<wbr><wbr><wbr><wbr><wbr><wbr> M_data = new char [ strlen(other)+1];</wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr> Strcpy(m_data , other.m_data);</wbr></wbr></wbr></wbr></wbr></wbr>

}

String & String::operate = (const String &other){

<wbr><wbr><wbr><wbr><wbr><wbr> If(this == &amp;other){</wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr> Return *this;</wbr></wbr></wbr></wbr></wbr></wbr>

}

Delete [] m_data;

M_data = new<wbr> char[strlen(other.m_data)+1];</wbr>

Strcpy(m-data , other.m_data);

Return *this;

}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics