C语言转向C++

C++增加项:

1.输入输出流

2.类和对象

3.运算重载

4.多态性与虚函数

5.继承与派生

此文章重点复习:类及其派生

语法介绍:

类与C语言的结构体十分相像,具有结构体的全部特性。

类在结构体之上多了:数据保护,类函数,继承。

1.数据保护

类的数据分为:public,protected,private三种。

其中public与结构体相同,能直接在对象中访问。

protected可以被继承的类调用。

private的数据或者函数为私有,不能被对象直接调用,需要使用类中定义的函数来改变相应的数据。

思考保护数据的意义:

其实保护数据没有什么特别的意义,保护还是不保护都对编译器进行编译没有影响。

唯一的意义就是大量的数据定之后能够看不见,不需要在众多数据中寻找。达到整理数据的效果。

另外一种整理数据的方法是用struct来包含数据。

2.类函数:

类函数可以直接定义在类中,就使得每个类函数为对象独有。就不需要为广义定义的函数传递对象形参了。对象作为形参不能参加一级指针及其以上的操作。

比如:

typedef struct Exp
{
    int x,y,w,h;
    Exp* next;
}Exp;

Exp* object = new Exp;

void Register(Exp* Self)
{
    Self->next = new Exp;    //错误,形参的同级别值不能被改变。
}

void Register(Exp** Self)    //重名函数,函数重载
{
    Self->next = new Exp;    //错误,无法访问对象地址**Self的成员
}

而独有函数就能实现:

class Exp
{
public:
    int x,y,w,h;
    Exp* next;
    void Register();
    void FREE();
};

Exp* object = new Exp;

void Exp::Register()
{
    this->next = new Exp;
}

void Exp::FREE()
{
    delete this->next;
    delete this;
}

上述函数变为对象独有的函数,就不会出现不能给自己的成员分配内存的情况就不用给每个对象写单独自己的函数,重复且麻烦,因为类本身就有对象自己的函数。

 类函数的意义:自动为每个对象创建独有的函数,而不需要为其单独写多余的函数。

3.继承与派生:

继承的格式:

class Attack
{
    int Power;
    int Speed;
};

//类模板

class Monster:public Attack
{
public:
    struct
    {
        int Now;
        int Total;
    }Life;
protected:
    struct
    {
        int x,y,w,h;
    }Collision;
};

//类模板

class BOSS:public Monster
{
    int BOSSAttibute;
};

类的继承需要在类名后加上:        :继承类型 继承类

多个类继承需要用逗号隔开:        :继承类型 继承类1,继承类型 继承类2

问题:

如果继承类中有与前面类重名的成员怎么办?

using namespace std;

class Exp_1
{
public:int x,y,w,h;
};

class Exp_2 :public Exp_1
{
public:int x, y, w, h;
      int momo;
};

class Exp_3:public Exp_2,public Exp1
{
public:int x, y, w, h;
};

Exp_3* object = new Exp_3;

int main()
{
    
    object->w = 1;

    object->Exp_2::w = 2;

    object->Exp_2::Exp_1::w = 3;

    printf("%d %d %d", object->w, object->Exp_2::w, object->Exp_2::Exp_1::w);

    return 0;
}

如图所示:继承的非重名的成员能直接调用。

新类继承之前的类之后,对象申请内存只需要申请当前类型的内存。

重名的成员需要先用成员访问符(.或者->)访问继承的类名,再使用域访问符::访问被继承类的成员。

object->Exp_2::Exp_1::w = 3;

object->Exp_1::w = 3;

上述意义相同。

两个类相互包含:

//A.h

#include"B.h"
class B;

class A
{
    B* b;
    void Take(B* b);
};



//B.h

#include"A.h"
class A;

class B
{
    A* a;
    void Take(A* a);
};



//A.cpp
#include"B.h"
#include"A.h"


void A:: Take(B* b)
{
    ...;
}

//B.cpp

#include"B.h"
#include"A.h"


void B:: Take(A* a)
{
    ...;
}


1.函数放在cpp,在.h中标记

2. .h文件相互在.h文件包含,并且包含对方类的class X;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值