C++ 面对对象编程
类
- 类的概念
- 类是对数据的一种抽象
- 类的声明
- 声明一个类的语法:
class 类名
{
private:
//私有的成员
public:
//公有的成员
};
- 类的成员
- 在类中可以声明函数,即成员函数,表示这个类的行为。一般放在头文件。
class Student
{
public:
int id;
char name[20];
double score;
void print();
}
- 类的定义
- 主要是对类中的成员函数进行定义
- 定义类成员函数的语法:
返回值类型 类名::函数名(参数列表)
{
//函数体
}
- 注意:
- 当成员函数定义在类的外部时,一定要在函数名前加上"类名::",以此表示该函数是类成员函数
- 在类成员函数中可以自由地访问该类的其他成员属性和成员函数。
- 类成员函数的定义一般写在与头文件对应的.cpp文件中。
对象和对象的使用
- 对象的概念
- 广义讲,要在内存上一段有意义的区域就称之为对象。
- 在C++中,对象一般指类在内存中装载的实例,具有相关的成员变量和成员函数。类是抽象的概念,而对象是通过类实现的具体实例。
- 构造函数和析构函数
- 由于对象一定会在内存中占有一段空间,所以一定会有其生命周期,即有申请内存空间和释放内存空间的步骤。
- 构造函数:是指当对象申请内存空间之后自动调用的函数。在产生实例时自动运行的函数。
- 析构函数:是指当对象的空间即将被销毁前自动调用的函数。
- 构造函数的声明
- 构造函数的声明需要在类中声明
- 构造函数没有返回值
- 构造函数的函数名必须和类名一致。
class Student
{
public:
char name[20];
Student(void); //构造函数声明
~Student(); //析构函数声明,()内必须为空
}
构造函数推荐在类外部定义。
类名(参数){} //内部定义
类名::类名(参数){} //外部定义
- 析构函数的声明
- 析构函数名以’~’+类名
- 析构函数没有返回值
- 析构函数没有参数列表
定义:
~类名(参数){} //内部定义
类名::~类名(参数){} //外部定义
- 对象调用公有成员
- 可以通过运算符".“或”->"访问对象里的公有(public)成员。
示例
/*
* class.h
*
* 类的声明
*/
#ifndef __STUDENT_H__
#define __STUDENT_H__
class Student
{
public:
char name[20];
double score;
void introduce(); //成员函数
Student(); //构造函数
~Student(); //析构函数
};
#endif
/*
* class.cpp
* 成员函数的定义
*/
#include <iostream>
#include "class.h"
using namespace std;
Student::Student()
{
cout<<"构造函数:Student::Student()"<<endl;
}
Student::~Student()
{
cout<<"析构函数:Student::~Student()"<<endl;
}
void Student::introduce()
{
cout<<name<<endl;
cout<<score<<endl;
}
/*
* class_test.cpp
*
* 应用示例
*/
#include "class.h"
#include <string.h>
int main(int argc, char **argv)
{
Student stu;
strcpy(stu.name, "Tom");
stu.score = 100;
stu.introduce();
return 0;
}
输出:
pi@raspberrypi:~/haitong-learning/C++/homework/C++概念 $ g++ class.cpp class_test.cpp
pi@raspberrypi:~/haitong-learning/C++/homework/C++概念 $ ./a.out
构造函数:Student::Student()
Tom
100
析构函数:Student::~Student()
pi@raspberrypi:~/haitong-learning/C++/homework/C++概念 $