云课堂C++开发工程师(一)
————————2016.5.15更新:忘了提交作业,以后一定要记得————————
侯捷大师关注以下几点:
4.1 数据一定放在private;
4.2 参数尽可能pass by reference,看状况加const;
4.3 返回值尽量pass by reference;
4.4 类的本体中尽量加const,避免报错;
4.5 构造函数尽量写初值列initialization list;
C与C++区别
C语言包含变量函数,其中数据都是全局的,可以被所有函数调用。
C++将数据和函数包在一起,通过面向对象的方式,来划分变量和函数的使用范围。
这两周的课程主要讲解两种类:复数——不带指针的类object based,字符串——带指针的类object oriented。
C++编译基本形式
C++由头文件和实现文件组成,头文件用于声明函数和变量,头文件一般是.h结尾,实现文件一般是.cpp结尾。但是这些不是强制性的,也就是说头文件可以不是.h结尾。
防卫式声明
防卫式声明可以避免重复include的动作:
#ifndef __MYFUNCTION__
#define __MYFUNCTION__
\\0.前置声明,1.类声明,2.类定义
#endif
语法(public / private)
\\class head
class complex
\\class body
{
public:
构造函数
运行:cout<<c1.function();
private:
声明数据,但是不可以被调用
友元函数
protected:
}
模板class template
在类中(private)定义一个未知类型“T”,在定义时被指定不同的数据类型。
内联函数inline
内联函数运行比较快,可以在本体内(public)定义,可以在本体外定义inline “function”。
构造函数constructor
构造函数和类名称相同,拥有参数,也可以有默认实参default argument,没有返回值类型。
初值列initialization list效率高:
complex (double r=0, double i=0): re(r), im(i) {}
重载overloading
3.1 函数名称相同,但是参数不同,可以重载,比如一个赋值函数和一个取值函数。
3.2 函数重载常发生在构造函数。
3.3 但是函数名称相同,有默认参数和无参数的两个函数不能重载。
创建对象时会调用构造函数
complex c1(1,2);
complex c2;
动态创建复数得到指针
complex* p = new complex(1,2);
析构函数(不带指针的类不需要)
私有区的构造函数-单例singleton
不允许外界创造对象,我们可以在类内部实例化一个对象,并将对象设置为static,这样的话,我们可以得到一个单例。
常量成员函数constant member function
函数不改变数据的函数要加const,在小括号后大括号前加const。
变量前const指其不能改变变量。
参数传递
pass by value || pass by reference (to const)
尽量传引用,包括参数传递和返回值类型:引用在底部就是指针,传递一样快,四个字节。
如果不希望函数改变引用的参数,需加const!!!
友元函数friend
声明在private中,定义在本体外可以直接拿其中的私有值:ths->c1.re。
本体外其他函数必须通过取值函数等函数拿私有值。
本体内的函数可以直接拿私有值c1.re,因为本体内相同class 的哥哥objects 互为friend。
class body 外的各种定义definitions
什么情况下可以pass by value,什么情况下可以pass by reference
函数必须创建地方来放--pass by value,其他可以pass by reference
操作符重载
重新定义其他类型数据的运算(+,+=),可以写成:
1.类内的成员函数,可以直接使用private数据,成员函数都带有隐藏参数this,但是不要在参数列写出来
2.本体外的非成员函数,