C++知识点第二篇

一、类

  class是面向对象程序设计的核心,是实现数据封装和信息隐藏的工具,是继承和多态的基础。

1、类声明中的访问限定符没有先后次序之分

2、同一个类中,访问限定符的出现次数没有限制

3、处于信息隐藏目的,多将数据成员和只能让内部访问的成员函数设置为private

4、数据成员可以是任何数据类型,但不能是自身类的对象!

5、在声明类时,不能为数据成员赋初值(因为类相当于一个自定义的数据类型,不存在为数据成员分配存储空间的事,所以直接赋初值会报错,因为此时数据成员在内存中还不存在)(类也存放栈中,调用时才会为其分配内存)

6、struct其实也是一种类,与class具有相同功能,区别在于没有指定成员的访问权限时,struct成员具有public权限、而class成员具有private权限。(C语言中使用struct,C++进一步扩展功能产生了类,更安全、封装性更好)

二、static和const

1、static关键字至少有下列n个作用:   
(1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;   
(2)在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;   
(3)在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;   
(4)在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;   
(5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。    
2、const关键字至少有下列n个作用:   
(1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;   
(2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;   
(3)在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;   
(4)对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的 成员变量;   
(5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。例如:   
const classA operator*(const classA& a1,const classA& a2);   
operator*的返回结果必须是一个const对象。如果不是,这样的变态代码也不会编译出错:   
classA a, b, c;   
(a * b) = c; // 对a*b的结果赋值   
操作(a * b) = c显然不符合编程者的初衷,也没有任何意义。   

三、sizeof()与strlen()

1、sizeof是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。具体而言,当参数分别如下时,sizeof返回的值表示的含义如下:数组——编译时分配的数组空间大小;指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4)。

2、strlen是函数,要在运行时才能计算。参数必须是字符型指针。当数组名作为参数传入时,实际上数组就退化成指针了。它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL。

四、构造函数

1、构造函数不能有任何返回类型

2、函数由系统自动调用,不能在程序中显式调用构造函数

3、定义数组对象时,必须有无参构造函数或所有参数有缺省值的构造函数

4、构造函数通常定义为公有成员,需进行类外访问

¥¥拷贝构造函数是一个特殊的构造函数,用于根据已存在的对象初始化一个新建对象。注意:当类具有指针类型的数据成员时,默认拷贝构造函数就可能产生指针悬挂问题(默认拷贝构造函数通过按位拷贝的方式将指针指向了同一内存地址,之后调用析构函数时,会二次释放同一存储区)

五、静态成员

  静态成员在类中声明但不会为其分配内存空间,使用前需要对它进行定义,一般在类外进行定义,且定义时不能加上static限定词,若未赋值系统默认为零(全体数据区)。

(   1、类型 类名::静态成员名;                       2、类型 类名::静态成员名 = 初始值;)

1、静态成员可以实现全局变量的功能,却不会破坏类的封装性,不会给程序的维护带来负担。

2、静态函数只能访问静态成员(包括静态的数据成员和成员函数)

3、在类外定义静态成员函数时,不能加上static限定词

4、静态成员函数可以在定义类的任何对象之前被调用,非静态成员只有在定义对象后,通过对象才能访问

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值