网站图片展示形式,网站架构功能模块及描述,模板网页生成,织梦网站首页模板更换类
c 是一种人机交互的面向对象的编程语言#xff0c;面向对象思想主要体现在 类 上。
类是具有相同属性和相同行为的对象的集合#xff0c; 具有封装#xff0c;继承#xff0c;多态的特性。
类的定义
class 类名 { }#xff1b;
封装
例如#xff1a;人就是一种类…类
c 是一种人机交互的面向对象的编程语言面向对象思想主要体现在 类 上。
类是具有相同属性和相同行为的对象的集合 具有封装继承多态的特性。
类的定义
class 类名 { }
封装
例如人就是一种类相同属性有年龄性别等。相同行为有吃饭喝水等。
把这些相同属性和相同行为封装到一个结构中就类。
class people{
public:
int age;
char sex;public:
void eat();
void drink();
};
同样动物也是一种类相同属性也有年龄性别等。相同行为也有吃饭喝水等。
class animal{
public:
int age;
char sex;public:
void eat();
void drink();
};
继承
这时发现人和动物的相同属性和行为可以再提取封装成一种类。
class object {
public:
int age;
char sex;public:
void eat();
void drink();
};
有了 object 类再定义人和动物的类的时候可以继承object 类。
class peoplepulic object {
};
class animal pulic object {
};
类 people 和 类 animal 中没有定义属性年龄性别和 行为吃饭喝水但是继承类object 所以类 people 和 类 animal同样有了属性年龄性别和 行为吃饭喝水。
这只是一层继承如果把类 people 和 类 animal继续往下区分还可以多层继承。
class object 是基类类 people 和 类 animal是子类也叫派生类。
多态
class animal pulic object {
public:
void call ();//动物叫声
};class doganimal {
public:
void call ();//狗叫声汪汪
};class catanimal {
public:
void call ()//猫叫声喵喵
}; 动物有叫声不同的动物有不同叫声这就是多态。
到此为止我们对类的框架有了一个大体的认识接下来是到类的内部。
类的属性和行为
类内部知识点权限构造函数析构函数内联函数友元函数等等
访问权限
三种权限私有权限 private保护权限 protected, 公有权限 public 如果没有标注权限默认是私有权限private
权限范围public protected private
权限可以作用于 属性和行为还有派生类(继承权限)。
私有权限将类属性和行为作为的私有成员不能在类外访问 保护权限将类属性和行为作为的保护成员不能在类外访问但是可以被继承 公有权限将类属性和行为作为的公有成员可以在类外访问。
私有继承将基类保护和公有的成员作为派生类的私有成员不能在类外访问 保护继承将基类保护和公有的成员作为派生类的保护成员不能在类外访问但是可以被继承 公有继承将基类保护和公有的成员作为派生类的公有成员可以在类外访问。
构造函数
构造函数有 默认构造函数拷贝构造函数移动构造函数
构造函数没有返回值如果类中没有定义的构造函数默认有 默认构造函数。
class object {
public:
int age;
char sex;public:
object(int age,char sex);//构造函数 声明
object(object obj);//拷贝构造函数 声明
object(object obj) noexcept; //移动构造函数 声明~object();//析构函数 声明
};object::object(int a,char s){ //构造函数 定义
age a ;
sex s ;
}object::object(object obj){ //构造函数 定义
age obj.age ;
sex obj.sex;
}object::object(object obj) noexcept{ //移动构造函数 定义}~object() { //析构函数 定义
}
构造函数可以对成员变量进行初始化, 可以在函数体内进行也可以用初始化列表。
object :: object(int a,char s) age(a), sex(s) { //构造函数 定义}
拷贝构造函数深拷贝和浅拷贝只是对指针的拷贝浅拷贝后两个指针指向同一个内存空间深拷贝不但对指针进行拷贝而且对指针指向的内容进行拷贝经深拷贝后的指针是指向两个不同地址的指针。
object :: object(object obj){ //拷贝构造函数 定义
age obj.age ;
sex obj.sex ;
}
拷贝构造函数使用场景
1.用一个对象初始化另一个对象
2.函数参数是类对象(即值传递。引用传递除外)
3.函数返回值是类对象。
移动构造函数
原型类名(类类型 ); 以object类为例其移动构造函数声明如下
object ( object obj ) noexcept; 使用场景
用一个临时对象(即将被销毁的对象)去初始化另一个同类型的对象。
主要是针对类中有指针变量的情况类似浅拷贝临时对象的指针变量置空NULL。
析构函数
原型~类名(); 以object类为例其析构函数声明如下
~object(){
}
类中含有指针变量需要在析构函数中处理以防内存泄漏。
内联函数
1.在类中定义的成员函数默认就是内联函数。
2.在类中声明的成员函数 前加上关键字 inline类外定义的成员函数前 也加上inline该成员函数是内联函数。
内联函数作用减少了调用函数的步骤而是直接替换。
友元函数
1.在类中声明的函数前加上关键字 firend. 不是类的成员函数。
以object类为例其声明如下
firend void show();// 类中声明
void show(){ // 类外定义
}
友元函数的作用可以访问类的私有成员和保护成员。
同样类中也可以有友元类作用同友元函数一样。
虚函数
1.在类中声明的函数前加上关键字 virtual
以object类为例其声明如下
virtual void call();// 声明
虚函数作用通过基类指针指向不同的派生类对象也就是动态绑定实现多态特性。
纯虚函数
1.在类中声明的函数前加上关键字 virtual直接0没有函数体。
以object类为例其声明如下
virtual void call() 0
类中含有纯虚函数该类是抽象类不能实例化。
在其派生类中必须对该函数重定义否则该派生类也成了 抽象类。