Geekband C++ 第一周

● 概述:以c++标准库中的complex对象为例,介绍了成员无指针的类的基本写法

● c++的历史
○ 1.0:c++98
○ 2.0:c++11

● c++代码的基本形式
○ 头文件:1)用户定义头文件;2)标准库
○ 用户代码

● 头文件设计
○ 头文件的防御式声明:避免多次包含同一段代码
■ #ifndef ... #endif
○ 头文件的布局
■ 0:前置声明
■ 1:类的声明
■ 2:类的定义

头文件布局

● 类的声明
○ 包括class head和class body:complex类的声明如
○ 内联函数
■ 直接在类内定义的函数为inline函数(当然最终是否以inline形式展开取决于compiler)
■ 在类外部定义内联函数:(函数返回值前加)inline
○ 私有成员和公有成员
■ 数据:一般声明为私有成员

Complex类声明

● 构造函数
○ 没有返回值,与类同名
○ 初始化方式
■ 使用初始化列表,而不是在构造函数中对私有成员赋值
○ 一般是公有成员,但也可以声明为私有成员
■ Singleton设计模式

● 常成员函数
○ 函数声明时加const关键字:明确表示不改变对象的数据
○ 常对象:const complex c1(2, 1) 只能调用常成员函数,调用其他函数会报错(因为普通函数有可能改变常对象的成员,这是矛盾的!)

● 设计函数时:参数传递和返回值传递
○ 参数传递
■ 值传递:需要拷贝对象到栈
■ 引用传递:一般采用引用传递,速度快(只需要传递对象的地址)
○ 返回值
■ 一般返回引用
■ 但是局部对象不能返回引用(局部对象的生存期在返回语句之后结束)

● 友元
○ 类中,函数声明时加 friend 关键字,函数定义时不需要加 friend关键字
○ 注意:相同class的object互为友元,于是有下边的代码

例:class的object互为友元

● 操作符重载:
○ 形式:例:inline complex& coplex::operator +=(const complex & x) {}
○ 返回值:可以是void,但不支持连续操作,比如c1+=c2+=c3;返回引用支持连续操作
○ 成员函数:默认使用this指针,指向operator的第一个对象
○ 如果操作数不是class的object
■ 使用非成员函数
○ 注意:一个有趣的用法,这些函数返回的是一个临时的对象
■ 生成临时对象的用法:typename(),比如int(7), complex(2,1)
■ return complex(real(x) +y, imag(x))

例:返回临时对象
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.constructor构造函数 构造函数名称=类名。构造函数的作用:初始化对象的数据成员。 1.1 构造函数的...
    hui1429阅读 457评论 0 0
  • 1.constructor构造函数 构造函数名称=类名。构造函数的作用:初始化对象的数据成员。 1.1 构造函数的...
    hui1429阅读 390评论 0 0
  • 第一周 c++历史 1.0:c++98 2.0:c++11 C++代码基本形式 头文件 标准库 .h 主程序 .c...
    文字工作者377阅读 202评论 0 0
  • C++文件 例:从文件income. in中读入收入直到文件结束,并将收入和税金输出到文件tax. out。 检查...
    SeanC52111阅读 2,841评论 0 3
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,534评论 1 51