一、什么是面向对象?
- 一种模拟现实的方法
- 对象是属性和方法的集合,与客观实体有对应关系
- 面向对象不是某一种语言的特性 而是一种编程思想
二、抽象和类
- 抽象:
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)
{
//使用new 分配资源
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关键字访问当前对象的成员
- 访问成员变量 this->成员名;
- 访问成员函数 this->函数名();
- 只有在类的非静态成员函数中才可以使用this指针,其他任何函数都不可以
- this指针的类型为类类型*const
- 可以返回当前对象的引用
class student
{
public:
student& addscore(int score);
}
student& student::addscore(int score)
{
this->score = this ->score + score;
return *this;
}