一、什么是面向对象?
- 一种模拟现实的方法
- 对象是属性和方法的集合,与客观实体有对应关系
- 面向对象不是某一种语言的特性 而是一种编程思想
二、抽象和类
- 抽象:
1)从具体事物抽取共同的本质特征 - 类
1)类是一种将抽象转换为用户定义类型的工具 2)将数据表示和操作数据的方组合成为一个整体 3)类的实例称为对象 4)类中的变量和函数称为成员
using namespace std;
class LandOwner
{
public:
LandOwner();
~LandOwner();
string name;
long score;
private:
int cards[20];
void TouchCard(int[]);
}
- 类的声明和使用
class 类名{}; struct 类名{};
三、访问修饰符合 常见访问修饰符
- public :修饰的成员在任意地方都可以访问 (共有)
- private: 修饰的成员只能在类中或者友元函数中可以访问(私有)
- protected: 修饰的成员可以在类中函数,子类函数及其友元函数中访问
修饰成员:
class 类名
{
修饰符:
成员列表;
};
四、类的成员函数
- 函数声明
class 类名 { 修饰符1: 变量1类型 变量1名称; 变量2类型 变量2名称; 修饰符2: 函数1返回类型 函数1名称(); } - 构造函数
定义: 以类名作为函数名 无返回值类型 作用: 初始化对象的数据成员(初始化数据成员) 类对象被创建时,编译器为对象分配内存空间 并且自动调用构造函数以完成成员的初始化 构造函数的种类: 无参构造 一般构造(重载构造) 拷贝构造
五、堆与栈内存
- new 申请堆内存 ;使用完了之后需要delete
- 局部和全局变量在栈区
六、析构函数
- 对象过期时自动调用的特殊成员函数
- 析构函数一般用来清理工作
- 析构函数的名字是在类名前加~
- 析构函数没有参数,智能有一个
class student
{
private:
double*scores;
public:
student(int len)
{
scores = new doubole[len];
}
~student()
{
delete scores
}
}
七、使用类创建对象
- 第一种实例化方式
栈内存种创建:类似声明变量 自定义类型名 对象名(); student stu(); student stu; ??a.stu 对象由系统创建并释放,不用担心出现内存泄漏 ??b.生命周期只在声明区域的大括号里 (这个不是和局部变量很想吗) ??c.栈内存的优势是读取速度快(仅仅次于寄存器),缺点是栈的数据大写和生命周期是确定的,缺乏灵活性 - 第二种实例化
在堆里面创建:new ?student* p_stu1 = new student(); ?student* p_stu2 = new student; ?auto* p_stu3 = new student(); ???注意: 1.p_stu1是指针,必须使用delete释放 2.使用灵活 八、this关键字 - 每个成员函数(包括构造和析构)都有一个this指针
- this指针指向调用对象,即可以通过this关键字访问当前对象的成员
|