博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
4、面向对象
阅读量:4636 次
发布时间:2019-06-09

本文共 2081 字,大约阅读时间需要 6 分钟。

1.基本的概念

    类,指的是莫一类的事物的概括,是一个抽象的

    对象:指的是某一类里面的一个实体,是具体的

类:

    通常包含了属性和行为。属性:被描述类的静态的特征,老虎的颜色、体重等静态的属性;行为:描述类的动态特征,比如跑

类的继承:

    继承之后的类,继承了原先的类的所有的属性和行为;继承之后的类,也可以有自己特有的属性和行为:

                            

    在类A的基础上建立一个新类B,类A成为基类或者父类,类B成为派生类或者子类;子类完全继承父类的所有的成员。

 
class 子类名字 : 继承的方式  父类的名字{}继承的方式:public /private/protected,如果省略的话,系统默认的是 private

2.类的封装

    类的封装就是将不同的属性和行为结合在一起,形成一个新的数据类型。

    成员变量:表示类的属性

    成员函数:表示类的行为的函数,

分为:共有、私有、保护 三种类型

公有:成员变量和成员函数可以被类内和外界访问和调用,也就是共有的成员可以通过变量被外接访问

私有:成员变量和成员函数只能被类的内部访问和调用,也就是说 私有的成员只能在类的内部使用

 

3.struct 和 class 区别:

    struct 定义类的时候,所有的成员默认的都是 public

    class定义类的时候,所有的成员默认的都是私有的

 

4、构造函数

    构造函数的作用是完成,类的对象初始化,他的名字和类名完全一致,可以有参数,但是必须没有任何的返回值

 
class Test{public:    Test(int v);  // 构造函数    ~Test();    int getValue();private:    int i;};Test::Test(int v)  // 构造函数{    i = v;}Test::~Test(){}int Test::getValue(){    return i;}int main(int argc, char **argv){    Test aa(5);  // 对象的初始化    Test bb = 5; // 对象初始化的方式2    Test cc = Test(6);  // 主动调用构造函数    printf("v = %d\n", aa.getValue());}

 

类的成员函数实现重载:

C++中函数可以实现函数的重载,构造函数其实也是可以实现重载的功能的:

 
class A{private:    int i;public:    A()  // 重载    {        i = 11;    }    A(int v)  // 重载    {        i = v;    }    int getvalus()    {        return i;    }};

显然,类的对象定义的时候,即使你没有进行初始化,编译器还是会自动完成对象的初始化,

构造函数的异类

默认构造函数、拷贝构造函数(完成对象的拷贝的任务)

 
A aa;  // 调用默认的构造函数,无参A bb = aa; // 调用拷贝构造函数

当类内自己没有定义构造函数和拷贝构造函数的时候,编译器会为你自动添加一个无参的构造函数,其函数体为空。而默认提供的拷贝构造函数,也只是简单的进行成员变量的值复制。

当类A的对象是类B的成员变量的时候:初试列表的使用

 
class A{private:    int i;public:    A(int v)    {        i = v;    }};class  B{public:    B()     {        printf("BB\n");    }private:    const int c;  // const 变量必须初始化    A a1;   // 对象也是需要进行初始化    A a2;};

    这个时候,会被报错,因为A的对象在B做成员的变量,压根就没有被初始化,所以在B内部需要给成员变量初始化,初始化列表:

 
class  B{public:    B() : c(1), a1(2), a2(3) // 构造函数里面,指定初始化的值,初始化列表    {        printf("BB\n");    }private:    const int c;    A a1;    A a2;};

    也就是说,通过初始化列表,对成员变量进行初始化,并且初始化列表的执行是先于构造函数的函数体执行的;也就是使用初始化列表对构造函数进行成员变量的初始化,

5.析构函数

    就是在对象被销毁之前调用的析构函数(完成一些清理的工作),析构函数没有参数,也没有任何的返回值类型

 
~ 类名(){}

    当自己没有写构造函数或者析构函数的话,编译器会自动为我们添加构造函数和析构函数。

    析构函数当且仅当只有一个。析构执行的调用顺序与对应的构造函数调用秩序相反。

转载于:https://www.cnblogs.com/qxj511/p/5215304.html

你可能感兴趣的文章
86. Partition List
查看>>
[LintCode] 378 Convert Binary Search Tree to Doubly Linked List 解题报告
查看>>
JAVA-初步认识-常用对象API(集合框架-泛型-泛型限定-上限的体现)
查看>>
caffe中的若干问题
查看>>
webpack学习(一)—— 入门
查看>>
c# 调用 webservices (转载)
查看>>
结对-(first)
查看>>
P1567 统计天数
查看>>
NOIp2018集训test-10-6/test-10-7 (联考五day1/day2)
查看>>
C++练习 | 运算符重载练习
查看>>
dalvik
查看>>
[总结] 第一类斯特林数
查看>>
PCI PCI-X PCI-E介绍
查看>>
汤圆防漏理论
查看>>
[转载] 民兵葛二蛋——第23集
查看>>
用Navicat复制数据库到本地(导入.sql文件运行)
查看>>
Excel坐标自动在AutoCad绘图_6
查看>>
2013/1/7
查看>>
请问如何理解同一个随机过程,里面的两个随机变量的期望不同呢?
查看>>
诡异的楼梯 HDU1180
查看>>