C知识点总结

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C知识点总结文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

类和对象初步

1.类的定义在定义外成员函数的实现

2.类的成员函数之间可以相互调用,类的成员函数也可以重载,也可设默认参数值

3.一般来讲,一个对象占用的内存空间的大小等于其成员变量的体积之和。每个对象都有自己的存

储空间(成员变量),但成员函数只有一份对象名.成员名指针->成员名引用名.成员名

4.private:一个类的私有成员,只能在该类的成员函数中才能访问 public: proteced:

5.class默认 private struct默认public

6.内联成员函数:成员函数名前加inline 或函数体写在类定义内部的成员函数。执行更快,但会带

来额外的内存开销

构造函数

1.构造函数全局变量在堆上,系统自动初始化为零。局部变量在栈上,初始值是随机的,需要初始

化。

2.构造函数:对对象进行初始化。构造函数执行时对象的内存空间已经分配,构造函数的作用是初

始化这片空间。可重载,不写的话有默认构造函数,但是如果编写了构造函数,那默认构造函数不会再执行。是一类特殊的成员函数。不写返回值类型,函数名为类名。

3.对象在生成时一定会调用某个构造函数,一旦生成,不再执行构造函数。

4.P183 Ctest *pArray[3]={new Ctest(4),new Ctest(1,2)}

5.复制构造函数:其是构造函数的一种,只有一个参数,为本类的引用,防止混淆,构造函数不能

以本类的对象作为唯一的参数。默认复制构造函数。

6.复制构造函数被调用的三种情形:1用一个对象去初始化另一个对象时Complex C1(C2) Complex

C2=C1; 2 函数的参数是类A的对象。形参未必等于实参函数中用对象的引用不会调用复制构造函数 void Function(const Complex &c)3 函数的返回值是类A的对象

7.类型转换构造函数:除复制构造函数外,只有一个参数的构造函数 C=6

8.析构函数:在对象消亡时调用,可以定义其做善后工作。是一类特殊的成员函数,一个类有且只

有一个构造函数。默认析构函数

9.注意:函数的参数对象以及作为函数返回值的对象,在消亡时也会调用析构函数

10.构造函数析构函数变量的生存期:全局变量在main函数开始执行前初始化。函数调用结束后

静态局部对象不消亡。main函数结束时,静态局部对象先消亡,全局对象再消亡

11.静态成员变量和静态成员函数:实质是全局变量和全局函数,被所有的同类共享。生成在对象生

成之前。计算体积时不会将静态成员变量算入其中老师的coeblocks C0 13 静态成员变量必须在

类定义外进行声明,声明的同时也可初始化。因为静态成员函数内部不作用于某个对象,所以不能访问非静态成员

12.常量对象和常量成员函数:常量对象一旦初始化后,值再也不能改变。常量对象和普通对象都可

调用常量成员函数。通过常量对象调用常量成员函数。常量成员函数内不能调用同类的非常量成员函数,静态成员函数除外。

13.封闭类:包含成员对象的类。在定义封闭类的构造函数时,用初始化列表的方式初始化。封闭类

对象生成时,先执行所有成员对象

友元和this

1.友元函数:把全局函数和其它类的成员函数声明为友元函数后,可直接在友元函数内部访问该类的

私有成员;但不能把其它类的私有成员函数声明为友元。

2.全局函数声明为友元:friend 返回值类型函数名(参数表);

3.其它类的成员函数声明为友元:friend 返回值类型其它类的类名::成员函数名(参数表);

4.友元类:类A将类B声明为自己的友元,则类B中所有的成员函数都可访问类A对象中的私有成

员。私有成员函数也可访问。

5.注意:友元关系不能传递。

6.this指针:非静态成员函数的实际形参比编写的多一个,就是this指针,指向成员函数作用的对象。

通过this指针找到对象所在的地址,继而找到对象非静态成员变量的地址。

7.注意:因为静态成员函数不作用于某个对象,所以在其内部无this指针,不能使用。

运算符重载

1.运算符重载:是对已有的运算符赋予多重含义,使不同的运算符作用于不同的类型的数据时导致

的不同的行为。实质是编写运算符作为名称的函数。

2.返回值类型 operator 运算符(形参表){......}

3.使用了被重载的运算的表达式,会被编译成对运算符函数的调用,实参是运算符的·操作数,运

算的结果是函数的返回值。运算符可多次被重载,可重载为全局函数和成员函数。重载为全局函数时,参数个数等于操作符的个数;重载为成员函数时,参数的个数等于操作数的个数减1. a—b被重载为(b);

4.类名(构造函数参数表)这个写法表示生成一个临时对象。该临时对象没有名字,生存期到包含

它的语句执行完为止。

5.C++规定 = 只能重载为成员函数.赋值运算符可以连用。

6.const char *c_str() const {return str); 两种错误的情形: char *p=(); strcpy(),"tianggong 1");

7.a=b="hello";等价于==("hello"));

8.(a=b)=c;等价于=(b)).operator=(c);

9.深复制和浅复制:两个对象的指针成员变量指向同一个地方,指向两个不同的地方。

10.将运算符重载为友元函数

11.重载插入运算符和流提取运算符:cout是ostream类的对象。ostream类和cout都是在iostream头

文件中声明的。ostream类将"<<"多次重载为成员函数。比如:ostream & ostream::operator<<( const char*s) {... return *this;) ostream & ostream::operator<<(int n) {... return *this;)

12.返回值*this是cout的引用 cout<<"star war"<<5;等价于<<("star war")).operator<<(5);

13.重载强制类型转换运算符:(类型名)对象等价于对象.operator 类型名()

14.重载自增,自减运算符 obj++ CDemo operator++(int)

15.++obj CDemo operator++(int)

继承与派生

1.继承与派生的关系:A类派生出B类,B类继承了A。派生类是通过对基类进行扩充和修改后得

到的。基类所有成员自动成为派生类成员。在派生类的成员函数中,不能访问基类的私有成员。派生类对象的体积等于基类对象的体积加上自己成员变量的体积。在派生类对象中,包含着基类对象,且基类对象的存储位置位于新增的成员变量之前。

2.基类的构造函数和析构函数不能被派生类继承,需要自己重新定义。如果基类构造函数没有定

义,派生类也可不定义,用缺省。如果基类的构造函数定义,派生类构造函数一定要定义。

3.注意:在基类和派生类中有同名成员,在派生类成员函数或派生类对象中访问同名成员,除非特

别之指出,访问的是派生类的成员。以下两种情况访问的是基类的成员:::PrintInfo(); p-

>CStudent::PrintInfo();

4.复合关系和继承关系:复合关系,有,表现为封闭类,但不一定只是封闭类。即一个类以另一个

类的对象作为成员变量。继承关系,是,类B继承类A,满足B所代表的事物也是A所代表的事物

5.类A知道类B:类A的成员变量是类B的指针

内联函数体内不能包含任何静态变量,不能使用循环语句、switch;不能递归。

2.内联函数的定义必须出现在第一次被调用之前。

3.如果函数返回类型为void,则不能有return 语句。

二:指针

通过指针引用数组元素

int a[10];

int *p;

p++是合法的,而a++是错误的。a是数组名,它是数组的首地址,是常量;

指向函数的指针变量:存放函数入口地址,指向的是程序代码存储区。

1、函数调用可以通过函数名调用,也可以通过指向函数的指针变量调用。

2、(*p) ( )表示定义一个指向函数的指针变量,在程序中把哪个函数的地址赋给它,它就指向哪一个函数。

3、给函数指针变量赋值时,只需给出函数名而不必给出参数。 p = max

4、用函数指针变量调用函数时,只需将(*p)代替函数名,在(*p)之后的括弧中根据需要写实参。

c=(*p)(a,b)

5、对指向函数的指针变量不能运算

const pointer

一个指针涉及到两个变量,一个是指针本身,另一个是指向的变量

1.指向常量的指针

const放在指针类型前,在程序中不能通过指针来间接修改指针所指向的内存空间的值,但可以改变指向的空间

int a = 10;

const int b = 20;

const int* pa = &a;

const int* pb = &b;

a = 100; 针常量

const放在”*”和指针名之间,不能改地址能改所指向的值。

int b =28;

int* const pb = &b;

*pb = 100; 向常量的指针常量

const在上述两个地方都加。既不允许修改指针值,也不允许修改指针变量所指向的值

const int a = 10;

const int * const pa = &a;

a = 100; 的静态数据成员为该类的所有对象所共享。

2. 必须在类外文件作用域中的某个地方对静态数据成员赋初值(因为构造函数多次被调用,而静态数据成员只初始化1次):

<类型> <类名>::<静态数据成员> = <初值>

Const 成员函数中确保不会修改任何本类对象的数据成员。

class constfun

{

private:

相关文档
最新文档