C++面向对象高级编程(上)_Boolan(W1)
2017-02-04 17:31
239 查看
C++构造函数,操作符重载,传参数笔记
1、C++是支持面向对象观念的一种语言
主要概念:类、对象、继承、动态绑定、多态性、消息传递
2、C++演化
C++98(1.0)初具国际规范
C++03(TR1,Technical Report1)
C++11(2.0)
C++14
3、C++分为C++语言和C++标准库两个部分
4、C vs C++
C++通过类将事物的数据和函数封装在一起,数据只有专属类可使用,类似C里面的Struct结构,但C++提供更多的关键字供开发人员使用。
5、Classes的经典分类:不带指针的类(Object Based——基于对象)与带指针的类(Object Oriented——面向对象)
Object Based:面向的是单一class的设计
Object Oriented:面向的是多重classes的设计,classes和classes之间的关系
6、文件包含#include
<>标准库路径寻找头文件
“”当前项目路径下寻找头文件
7、头文件中的预卫式声明
#ifndef _COMPLEX_
#define _COMPLEX_
...
...
#endif
如果没有定义COMPLEX,则定义COMPLEX,第二次引用COMPLEX已定义过不会进入主体就不会有第二次include含入的动作
8、模板(实现不同类型实现统一的处理)
template<typename T>
用的时候指定数据类型
complex<double> c1(2.5, 1,5);
complex<int> c2(2, 6);
9、inline(内联)函数:函数在本体定义,函数太复杂不能生成inline,由编译器决定,类似于宏,区别于宏有宏的特性没有宏的缺点,不再本体内定义可以加inline关键字定义为inline函数。
10、数据尽量定义为private,对外接口函数定义为public,若提供给内部使用函数可定义为private。
11、构造函数
类创建对象自动调用默认构造函数。
构造函数初始化列表赋值方式与构造函数体内赋值的区别:构造函数体内赋值放弃了初始化阶段,结果一样,过程不同,效率上初始化列表赋值方式比较快。
Note:一个变量数值的设定有两个阶段一个是初始化,一个赋值。
构造函数可以有很多个(重载:同名不同参数的函数),构造函数经常重载,写构造函数避免二义性。
如果构造函数放在private则不可被外界调用,不允许被外界创建对象,设计模式可把构造函数定义在private(singleton/单例/单体/外界只能用一份)。
12、析构函数(不带指针的类多半不用写析构函数)
13、函数后头是否加const
获取数据不改变数据加const,改变数据不加const, 若不改变数据不加const的可能造成编译器无法通过。
14、参数传递(传值,传引用)
尽量所有的参数传引用(效率比较快),传
4000
引用加const表示引用值不可更改, 返回值如果可能的话尽量传引用。
Note:不能传/返回临时变量的引用
15、friend(友元)可直接调用类的private数据,如果通过函数获取数据效率相较会慢一点。
Note: 相同class的各个objects互为friends
eg:
class complex
{
public:
complex (double r=0, double i = 0)
: re (r), im(i)
{}
int func(const complex& param)
{ return param.re + param.im};
private:
double re, im;
};
使用
{
complex c1(2, 1);
complex c2;
c2.func(c1);
}
16、操作符重载之一,成员函数
所有的成员函数都带有一个隐藏的this指针,函数没有定义class名称表示全局作用域函数。
17、操作符重载之二,非成员函数
非成员函数,不可返回引用,因为,引用返回的必定是个local object,全局函数没有this指针。
Note: this指针由编译系统自动创建,用它来指向当前被调用函数对象。this地址值就是对象的首地址,并且该对象是系统当前被调用的对象
18、temp object(临时对象) 创建临时对象格式:typename();
19、<<操作符重载函数建议全局定义
1、C++是支持面向对象观念的一种语言
主要概念:类、对象、继承、动态绑定、多态性、消息传递
2、C++演化
C++98(1.0)初具国际规范
C++03(TR1,Technical Report1)
C++11(2.0)
C++14
3、C++分为C++语言和C++标准库两个部分
4、C vs C++
C++通过类将事物的数据和函数封装在一起,数据只有专属类可使用,类似C里面的Struct结构,但C++提供更多的关键字供开发人员使用。
5、Classes的经典分类:不带指针的类(Object Based——基于对象)与带指针的类(Object Oriented——面向对象)
Object Based:面向的是单一class的设计
Object Oriented:面向的是多重classes的设计,classes和classes之间的关系
6、文件包含#include
<>标准库路径寻找头文件
“”当前项目路径下寻找头文件
7、头文件中的预卫式声明
#ifndef _COMPLEX_
#define _COMPLEX_
...
...
#endif
如果没有定义COMPLEX,则定义COMPLEX,第二次引用COMPLEX已定义过不会进入主体就不会有第二次include含入的动作
8、模板(实现不同类型实现统一的处理)
template<typename T>
用的时候指定数据类型
complex<double> c1(2.5, 1,5);
complex<int> c2(2, 6);
9、inline(内联)函数:函数在本体定义,函数太复杂不能生成inline,由编译器决定,类似于宏,区别于宏有宏的特性没有宏的缺点,不再本体内定义可以加inline关键字定义为inline函数。
10、数据尽量定义为private,对外接口函数定义为public,若提供给内部使用函数可定义为private。
11、构造函数
类创建对象自动调用默认构造函数。
构造函数初始化列表赋值方式与构造函数体内赋值的区别:构造函数体内赋值放弃了初始化阶段,结果一样,过程不同,效率上初始化列表赋值方式比较快。
Note:一个变量数值的设定有两个阶段一个是初始化,一个赋值。
构造函数可以有很多个(重载:同名不同参数的函数),构造函数经常重载,写构造函数避免二义性。
如果构造函数放在private则不可被外界调用,不允许被外界创建对象,设计模式可把构造函数定义在private(singleton/单例/单体/外界只能用一份)。
12、析构函数(不带指针的类多半不用写析构函数)
13、函数后头是否加const
获取数据不改变数据加const,改变数据不加const, 若不改变数据不加const的可能造成编译器无法通过。
14、参数传递(传值,传引用)
尽量所有的参数传引用(效率比较快),传
4000
引用加const表示引用值不可更改, 返回值如果可能的话尽量传引用。
Note:不能传/返回临时变量的引用
15、friend(友元)可直接调用类的private数据,如果通过函数获取数据效率相较会慢一点。
Note: 相同class的各个objects互为friends
eg:
class complex
{
public:
complex (double r=0, double i = 0)
: re (r), im(i)
{}
int func(const complex& param)
{ return param.re + param.im};
private:
double re, im;
};
使用
{
complex c1(2, 1);
complex c2;
c2.func(c1);
}
16、操作符重载之一,成员函数
所有的成员函数都带有一个隐藏的this指针,函数没有定义class名称表示全局作用域函数。
17、操作符重载之二,非成员函数
非成员函数,不可返回引用,因为,引用返回的必定是个local object,全局函数没有this指针。
Note: this指针由编译系统自动创建,用它来指向当前被调用函数对象。this地址值就是对象的首地址,并且该对象是系统当前被调用的对象
18、temp object(临时对象) 创建临时对象格式:typename();
19、<<操作符重载函数建议全局定义
相关文章推荐
- (Boolan) C++面向对象高级编程(五)
- (Boolan) C++面向对象高级编程(二)
- (Boolan) C++面向对象高级编程(三)
- Boolan第一周---C++面向对象高级编程(上)
- 【boolan c++】面向对象高级编程(下)week1
- C++面向对象高级编程(上)_Boolan(W2)
- Boolan C++面向对象高级编程(上)第二周笔记
- Geekband_C++面向对象高级编程_第三周学习笔记
- C++面向对象高级编程(下)第二周-Geekband
- Geekband C++面向对象高级编程(下) 第一周笔记 暗影行者
- C++面向对象高级编程(上)学习笔记
- GeekBand C++面向对象高级编程(上)一
- C++面向对象高级编程(上)学习笔记
- Geekband C++面向对象高级编程(上) 第二周笔记 暗影行者
- C++面向对象高级编程笔记01--GeekBand
- (GeekBand)C++面向对象高级编程(上)第一周笔记(2)
- GeekBand C++ 面向对象高级编程(上) 第二周笔记
- Geekband_C++面向对象高级编程_第五周学习笔记
- GeekBand C++ 面向对象高级编程(上) 第一周笔记
- (Geekband)C++面向对象高级编程(第一周)