设为首页 加入收藏

TOP

C++面向对象基础教程
2018-04-12 08:41:39 】 浏览:166
Tags:面向 对象 基础 教程

1、结构体成员默认的属性是公共的,而类成员默认是私有的。

C++的结构体也可以设置 public,private。但C语言中不行。

2、内联函数和外联函数

在类体内实现的成员函数称为内联函数,在调用处用内联函数体的代码来替换,提高运行速度。在类体外实现的成员函数称为外联函数。外联函数转换成内联函数时只要在外部函数定义前加上 inline 就可以,不需要在类内部声明处加。

3、不宜使用内联函数的两种情况:

1)函数体代码较长,使用内联函数将导致内存消耗代价较高。

2)如果函数体出现循环,那么执行函数体内代码的时间要比函数调用的开销大。

4、 this 指针:

this 指针只有在成员函数中才确定其存放的位置,并可以使用 this 指针访问数据成员。使用 this 指针可以预防成员函数形参和成员变量重名,导致函数中成员变量被隐藏出现的问题。

5、构造函数是否会出现函数形参和成员变量重名问题?

不会,构造函数的初始化表有严格的格式定义,系统能够感知到括号外面是类的成员变量,括号内是构造函数的参数。

6、 const 变量在 C 和 C++ 中的区别:

C 语言中,const修饰的变量可以通过访问变量的地址,间接修改变量的值,但在 C++中不行。因为 C++中的 const 通常当成编译器的常量来处理,也就是说编译器不为 const常量分配空间,只是在编译时将它的值保存在名字表中,所以通过内存地址间接修改常量的值,不管修改多少次,其结果都是存放在名字表中的初值。若想让 const 常量值和其对应地址中的同步,加上 volatile 关键字就行(例如:volatile const int a = 1;)

7、C++中,const 在类与对象中的应用:

1)常量数据成员的应用:const 数据成员的初始化必须在构造函数的初始化表中进行。

2)函数参数为常量的应用:类中函数成员的参数通常使用引用,表示用源头的数据,不会再复制一份。如果希望传递给函数成员的参数不被破坏,就需要定义成 const 。(例如:void set(const int &x) { } )

3)常量成员函数与常量对象的使用方法:

对象调用常量函数规则:

1、非常量对象既可以调用常量函数,也可以调用非常量函数。

2、常量对象可以调用常量函数,不可以调用非常量函数。

3、常量函数和非常量函数重载时,常量对象调用常量函数,非常量对象调用非常量函数。

8、突破常量成员函数修改数据成员的限制:

1)为什么不能改?

每个成员函数隐藏了一个指向对象本身的 this 指针参数,this 指针的类型取决于对象,如果是常量对象,this 当然就是常量指针。此时,我们不能通过 this 指针去修改对象对应的内存块。但这是编译器的限制,有两种方法可以突破此限制:

1、将 this 常量指针转换成非常量指针:

将 this 常量指针的属性去掉,可以使用 const_cast 运算符完成。

( DEMO *p = const_cast (this) )

2、修改数据成员的存储类型,允许该数据成员可以在常量函数中被修改:

传统的存储类型有 auto, static, register, extern 四种。

auto:表示数据块作用域内局部变量的默认存储类型。

static:表示全局变量的默认存储类。

register:表示提示编译器把局部变量或函数的形参尽可能放入CPU的寄存器中,以便快速访问。

extern:表示全局变量可以被各个对象模块访问。使用extern 关键字时,表示变量已经在别处定义了,所以不能在此处初始化。

C++中又引用了一种新的存储类型:mutable。该存储类型只能用于类的数据成员,不能用于普通变量。具有 mutable 属性的数据成员允许常量函数修改类的 mutable 的数据成员。(mutable int a;)

9、static 常见用法:

1)静态全局变量和普通全局变量:

作用域不同,前者作用于当前源文件,后者作用于整个工程(其他文件可以通过 extern引用)。都存储在全局数据区,初始化为0。

2)静态局部变量和普通局部变量:

1、存储位置不同。前者在全局数据区,作用域是局部的,外部不能调用,不会因为某个子函数的完成而释放内存空间;后者存放在栈区。

2、默认初始值不同。如果没有初始化,静态局部变量默认的初值是0,普通局部变量的初值是随机值。由于静态局部变量的生命周期是全局的,所以对其初始化只会执行一次,后面遇到合法初始化操作将自动跳过。而局部变量的生命周期是局部的,所以合法的初始化动作每次都会执行。

3)静态函数和普通函数:

主要是作用域不同,静态函数的作用域是当前文件,对该工程其他的源文件是隐藏的、不可见的,而普通函数的作用域在整个工程都是可以调用的。

10、静态成员变量:

① 静态数据成员是属于整个类的,而不是属于某个对象的。不管实例的对象有多少个,它们都共用同一个静态数据成员。普通静态白能量如果没有初始化,默认为0,而静态成员变量必须手动初始化才能用。它需要在类外进行静态变量初始化。

格式:数据类型? 类名 :: 静态成员名 = 初始值;

例如: int? DEMO :: b = 100;

② 静态数据变量的特点:

1)即使没有实例对象,仍然可以访问静态数据成员。

2)静态数据成员存储在全局数据区中,因此静态数据成员定义时需要分配空间,所以不能在类声明中初始化。

静态数据变量的独特访问方式:

格式:对象名.成员名。

例如:cout<

在成员函数中可以通过this 指针定义静态数据成员。

遇到 const 和 static 双重属性的数据成员时,初始化动作只能在声明时进行。

③ 对于成员函数来说,static 和 const 不能共存。

静态数据成员可以时 const 的,但是静态函数成员不能是常量函数。如果类的成员函数是 static的,该成员函数属于类的一部分,不再独立属于任何对象,所以静态成员函数中没有指针,但是常量成员函数的第一个参数是常量指针。所以不能共存。

11、静态成员函数:

静态成员函数是类本身的一部分,不独立属于某个对象,因此 this 指针的存在就没什么意义了,所以静态函数无法访问普通的成员变量,它只能调用其余的静态成员。

12、静态对象:

用法和静态变量类似,只不过其储存位置放在了全局数据区。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++的ifstream中使用eof最后一个.. 下一篇C++运算符重载教程

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目