1、前言
C++的三大特性:封装、继承、多态
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
参考学习资料:慕课网 james_yuan 的C++远征系列 之C++远征之 封装篇 。
2、封装概述
数据成员&成员函数
构造函数&析构函数
对象赋值&对象复制
对象数组&对象指针
this指针
3、封装之路
1、类和对象
类的定义:数据成员、成员函数。
类的访问限定符:
public:公共的
protected:受保护的
private:私有的
类的实例化:
//从栈中实例化
clss Teacher{
pubilc:
string m_strName;
string m_strGender;
int m_iAge;
void teach();
};
int main(void){
Teacher tea; //实例化一个对象
Teacher tea[20]; //实例化一个数组
tea.m_strName = "zhangsan"; //对象成员的访问
// 数组对象成员的访问用for循环
tea.teach();
return 0;
}
//从堆中实例化
int main(){
Teacher *p = new tea();
Teacher *q = new tea[10];
// to do
p->m_strName = "zhangsan"; //对象成员的访问
p->teach();
delete p; //释放内存
delete []q;
return 0;
}
2、数据的封装
封装的好处:能够对数据进行判断,数据的读写控制。
只读属性只写get函数
class Student{
public:
void setAge(ing age){
m_iAge = age;
}
int getAge(){
return m_iAge;
}
}
private:
string m_strName;
string m_strGender;
int m_iAge;
};
int main(void){
Student stu;
stu.m_strName("zhangsan");
stu.m_strGender("男");
int m_iAge = 10;
cout << getName() << "," << getGender() << endl;
return 0;
}
3、类外定义
前面提到内联函数效率但逻辑简单不能使用for、while循环。
clss Student{
pubilc:
inline void setName(string name){
m_strName = name;
}
private:
string m_strName;
};
类外定义分为同文件类外定义、分文件类外定义。
1、定义类
class Student{
pubilc:
void source();
void study();
private:
string m_strName;
int m_iAge;
};
2、成员函数
void Student::source(){ //需要声明是那个类的成员函数
// to do
}
void Student::study(){
// to do
}
同文件定义:将1、2写在同一个文件里面
分文件定义:
1命名为Student.h
2命名为Student.cpp 同时将Student.h包含到头文件里面:#include<Student.h>
分文件定义是我们经常使用的一种定义方法
4、构造函数
内存分区
栈区:定义变量,由系统进行控制。
堆区:new申请内存,使用完需要用delete删除,再用赋值语句NULL设置为空值。
全局区:存储全局变量及静态变量。
常量区:字符串和常量。
代码区:存储编译后的二进制代码。
对象初始化:
1.有且仅有一次
2.根据条件初始化
规则和特点:
构造函数在对象实例化的时候被自动调用
构造函数与类同名
构造函数没有返回值
构造函数可以有多个重载形式
实例化对象时仅用到一个构造函数
当用户没有定义构造函数时编译器自动生成一个构造函数
//无参构造函数
class Student{
pubilc:
Student(){m_strName="Jim";}
private:
string m_strName;
};
//有参构造函数
//默认构造函数
Student(string name){m_strName = name;}
初始化列表
class Student {
pubilc:
Student(): m_strName("Jim"), m_iAge(10){} //初始化列表
private:
string m_strName;
int m_iAge;
}
特点
1.初始化列表只用于构造函数
2.先于构造函数执行
3.可以同时初始化多个成员函数
5、析构函数
归还系统的资源
定义析构函数: ~类名()
不允许加任何参数!
特点:
如果没有定义一个,系统会自动产生一个。
没有返回值
不能重载
在对象销毁时自动调用
对象的生命历程
申请内存 >初始化列表 >构造函数 >参与运算 >析构函数 >释放内存
6、附总结图
网友评论