面向对象编程(C++)学习笔记二

一.头文件与源文件的分离

  • class的分离式写法
    把class的成员函数定义写在class之外,即class的大括号的外面。
    例如,main.cpp
class Object{
public:
int x;
void Test();        //成员函数的声明
};
void Object :: Test()
{
// 成员函数写在类外面,加上类名限定
}

总结:
(1)成员变量,还是写在类里面;
(2)成员函数,在类里保留其函数声明,而函数的定义写在类体之外;
(3)写在类外面的时候,要加上类名限定(Object::),其中,::表示范围的符号;按照一贯的原则,类型定义写在头文件里,函数实现写在源文件里。
(4)为了防止头文件被重复包含

#ifindef _OBJECT_H
#define _OBJECT_H
......
#endif

注意:
(1)不一定要把所有函数定义都拿出来,可以只拿一部分出来;
(2)如果写在类里面,编译器就按inline的规则编译它,类体之外,则是普通的函数;
(3)在类体中,成员函数与成员变量的排列顺序是自由的;

二.类的构造函数

如何让一个对象在创建的时候,就赋予初始值?
方法是:构造函数。
构造函数是类的一种特殊的成员函数:函数名与类名必须相同;没有返回值。
例如,

class Circle{
......
public:
Circle(){
x=y=0;
radius=1;
}
};

构造函数可以带参数,也可以重载。
构造函数如何调用?
构造函数和普通成员函数不一样,一般不显示调用。在创建一个对象时,构造函数被自动调用。

三.类的析构函数

析构和构造是一对相反的过程。析构函数:对象被销毁时调用。析构函数也不是普通的函数。
(1)名称固定:类名前加上波浪线~
(2)没有返回值
(3)不能带参数
例如,

class Object{
public:
~Object(){
......
}
};

析构函数只能有一个,不允许重载。
析构函数如何调用?
析构函数从不显示地调用,而是被编译器自动地调用。
什么时候被调用?
对象被销毁时。
析构函数的作用,例如,

class SringBuffer{
public:
StringBuffer(){
m_buffer = malloc(1024*512);    //申请内存
}
~StringBuffer(){
free(m_buffer);             //释放内存
}
};

四.默认构造函数

把那种不需要传参的构造函数,称为默认构造函数。或者构造函数的所有参数都有缺省值,也称为默认构造参数。例如,Object(); 或 Object(int a=10, int b=11);有了默认构造函数之后,对象在构造时就可以不传递参数。例如,Object obj;如果一个类没有写任何构造函数,则编译器隐含地为其添加一个。
注意,如果一个类没有默认构造函数,则无法构造数组,所以,一般都要给类定义一个默认构造参数。

你可能感兴趣的:(编程语言)