类与对象
class People { public: //成员变量 char name[20]; int age; //成员函数 char *getName(); int getAge(); //构造函数 People(); People(int age); People(int age,char name[]); //复制构造函数 People(People &people); //析构函数 ~People(); };
#include "People.h" int People::getAge() { return age; } char *People::getName() { return name; } int main(){ People people; people.getName(); People *p; p=people; p->getName(); People people1(20); People people2(30,"abc"); } People::People(){ } People::People(int age) { this->age = age; } //构造函数:在创建对象时,进行初始化 People::People(int age, char *name) { this->age = age; this->name = name; } //复制构造函数:对象备份 People::People(People &people) { age = people.age; name = people.name; } //析构函数 一个类只能有一个析构函数,并且不能重载,在回收对象时,对资源进行回收 People::~People(){ age = 0; name = NULL; }
2.友元
当用户希望另一个类能够访问当前类的私有成员时,可以在当前类中将 另一个类作为自己的友元类,这样在另一个类中就可以访问当前类的 私有成员了
通过friend关键字,暴露protect和private的属性,供其他无法访问的类访问
char *getHome(People &people); 对应的是 char *People::getHome(People &people) { return people.home; } friend char *getHome(People &people); 对应的是 char *getHome(People &people) { return people.home; }
声明友元类 friend class Person; 声明友元函数 friend char *getHome(People &people);
命名空间
命名空间就是一个命名的范围区域,程序员在这个特 定的范围内创建的所有标识符都是唯一的
关键字namespace
namespace name1{ char name[] = "wang"; } namespace name2{ char name[] = "long"; }
使用:
using namespace name1; 或 name1::name;
继承
继承方式有3种派生类型,分别为公有(public)型、保护 ( protected ) 型 和 私 有 ( private ) 型
class People : public Person{
公有型派生表示对于基类中的public数据成员和成员函数,在派 生类中仍然是public;对于基类中的private数据成员和成员函数,在 派生类中仍然是private
私有型派生表示对于基类中的public、protected数据成员和成员 函数,在派生类中可以访问。基类中的private数据成员,在派生类中 不可以访问
保护型派生表示对于基类中的public、protected数据成员和成员 函数,在派生类中均为protected。protected类型在派生类的定义时 可以访问,用派生类声明的对象不可以访问,也就是说在类体外不可 以访问。protected成员可以被基类的所有派生类使用,这一性质可以 沿继承树无限向下传播。
当从父类派生一个子类并声明一个子类的对象时,它将先 调用父类的构造函数,然后调用当前类的构造函数来创建对象;在释 放子类对象时,先调用的是当前类的析构函数,然后是父类的析构函 数
多重继承中的基类构造函数 被调用的顺序以类派生表中声明的顺序为准。派生表就是多重继承定 义中继承方式后面的内容,调用顺序就是按照基类名标识符的前后顺 序进行的
虚函数允许在派生类中重新 定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和 派生类中的同名函数。关键字 virtual
覆盖和重载的区别是,重载是同一层次函数名相同,覆盖是在继 承层次中成员函数的函数原型完全相同。
包含有纯虚函数的类称为抽象类,一个抽象类至少具有一个纯虚 函数。纯虚函数(pure virtual function)是指被标明为不具体实现的 虚成员函数,它不具备函数的功能
虚函数:允许子类重写
纯虚函数:没有实现的函数 ,子类必须实现
virtual char* getName() = 0;