前面我们介绍了c++作为一个面向对象的高级编程语言,知道了面向对象的特征。今天就开始正式的学习c++了。
我们知道,c++的核心就是把程序功能化,结构化,那么结构化,就必须有类。
一个类,里面有变量,有方法(函数)。类里边的变量,我们称他为成员变量,函数就称为成员函数。
由于c++封装的特性,一般默认情况下,类里边的成员变量和成员方法都是private的也就是私有的,外部对象是无法访问的,这种情况下类就没有了任何作用,因此我们一般把成员变量设为私有,把成员方法设为public ,公有的成员方法也称作接口。
构造函数,和类名相同,无返回值,负责对成员变量初始化。
访问函数,得到成员变量的值
设置函数,设置(修改)成员变量的值
析构函数,在释放对象的时候启用,以~开头,和类名相同。
一般情况下,就算我们不写构造函数,系统也会给我们添加一个构造函数,这个构造函数就叫做默认构造函数,他不对成员变量有任何操作。我们写的构造函数会屏蔽系统的默认构造函数。但是构造函数是可以重载的。
所谓重载,就是相同的函数名,不同的参数列表,(变量类型不同,或者变量个数不同)
默认构造函数分为两种,不带参数的构造函数,带参数的有默认值构造函数。
不带参数的构造函数,这就是系统生成的构造函数一样,不对成员变量有任何操作。但是我们声明了,系统就不会在生成默认构造函数。
带参数的有默认值的构造函数,他可以包含很多情况,不带值的,带有一个值,或者更多值的。
class Thing { private: int x,y; public : //Thing(int a=0,int b=0); Thing (); Thing (int a,int b); }; class Thing { Thing (){}//默认构造函数 Thing (int a,) { x=a; }//重载的构造函数 Thing (int a,int b) { x=a,y=b; }//带有默认值得构造函数 //Thing (int a,int b); 这条语句和上面的语句不能同时存在,因为带默认值的构造参数包含了上面的情况,不复合重载的规则 }
当然了,构造函数还有一个表达方式,就是初始化列表,以“:”开头后加成员变量(参数值)
如:
Thing (int a,nt b):x(a),y(b)P{}
在以下情况下必须用初始化列表:
类中的const成员、类中的引用成员、父类中无默认构造函数,在子类中对父类成员初始化必须使用初始化列表。
还有一个小知识点,就是 const 修饰的对象:
在c语言中,我们知道const 修饰的变量一经初始化就不能在改变了,那么在c++中,是怎么样呢?
在c++中 所有内容分为两类,对象 const修饰对象 普通对象
成员 const修饰 普通成员
方法 const修饰方法 非const方法
其中,非const修饰的对象可以调用const成员函数也可调用普通成员函数
const对象只能调用const 成员函数
const成员函数 只有只读权限,因此它不可能修改成员变量的值
在函数定义时三种方式:
1、 函数返回值是const引用,函数的返回值不能被修改(不能做左值)
2、 函数的参数是const引用 函数体内不能修改参数的值int func(constint &)
3、 函数修饰成员函数(只限于类的定义) int function(int)const;在该函数体内不能修改成员变量(常用与打印输出函数,保护权限)
const 修饰的函数:此函数只能是类成员函数
1、 不能在const成员函数中修改成员变量的值
2、 只有类的成员函数才可以被const修饰
3、 函数体内不能调用该函数的对象
4、 只有类成员函数才可以修饰为const成员函数
5、 const成员函数只能调用该类中的const成员函数
6、 在类中,类中的一个成员函数有const版本和非const版本