类与对象基础与使用
1.类与对象基础知识
声明类的规范格式:
class A{
private: //访问修饰符
//申明数据成员
int* num;
public:
//构造函数
A(){
num = new int;
}
//析构函数
~A(){
delete num;
num = 0;
}
//申明函数成员
void show(){
cout << "这是一个函数" << endl;
}
};
构造函数
无返回值 函数名与类名相同, 在对象声明初始化对象变量
析构函数
无返回值 函数名与类名相同 “~ + 类名”,生命周期结束时自动调用, 用于删除类内指针成员变量在堆区分配的空间(或句柄)
注 : 若类中没有定义析构函数,则存在默认的什么都不做的析构函数
访问修饰符
数据封装是面向对象编程的一个重要特点,它防止函数直接访问类类型的内部成员。类成员的访问限制是通过在类主体内部对各个区域标记 public、private、protected 来指定的。*关键字 public、private、protected 称为访问修饰符
注: 在声明成员变量时 若什么都不写则默认为private
公有(public)成员
公有成员在程序中类的外部是可访问的。您可以不使用任何成员函数来设置和获取公有变量的值
私有(private)成员
私有成员变量或函数在类的外部是不可访问的,甚至是不可查看的。只有当前类内可以访问私有成员。
默认情况下,类的所有成员都是私有的。
保护(protected)成员
保护成员变量或函数与私有成员十分相似,但有一点不同,保护成员在派生类(即子类)中是可访问的。
对象声明
int main(){
A a; //声明一个对象名为a
a.show(); //调用a内函数
return 0;
}
对象的种类
对象的种类 | 生命周期 | 声明方式 |
---|---|---|
临时对象 | 当前一行 | 类名 + () |
全局对象 | 程序结束 | 类名 + 对象名 |
堆区对象 | 被释放时 | 类名 * 对象名 = new 类名 |
栈区局部对象 | 当前作用域结束 | 类名 + 对象名 |
注:当使用堆区对象时 需new与delete才能触发构造 析构函数
成员变量是在创建对象时出现, 每个对象都有一份单独的成员变量
成员函数是在编译期出现, 所有对象共用一份函数
因而为了区分不同的对象成员,类中所有非静态(static)的成员函数都有一个隐藏的指针 this ,用来装调用者的地址以区分不同对象的成员,实质完成了封装
2.类的继承
class son : public father
继承使得子类能够在修饰符的允许下使用父类的成员变量以及成员函数
类的继承方式
有public, protected, private三种继承方式,它们相应地改变了基类成员的访问属性。
1 . public 继承:基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:public, protected, private
2 . protected 继承:基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:protected, protected, private
3 . private 继承:基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:private, private, private
注:
1 . private 成员只能被本类成员(类内)和友元访问,不能被派生类访问;
2 . protected 成员可以被派生类访问。