游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: aear

C++基本功和 Design Pattern系列(1) - Inheritance VS Delegation

[复制链接]

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2007-10-27 00:57:00 | 显示全部楼层

Re: C++基本功和 Design Pattern系列(1) - Inheritance VS Delegation

发现一处错误:

如果我们有个函数,是DrawBitmap,那么就有两种不同的声明方式。
========错误的方式========
void DrawBitmap(CBitmap Bitmap);
========正确的方式========
void DrawBitmap(CBitmap & Bitmap);
如果我们使用第一种方式,那么程序就会创建一个临时的CBitmap object,然后把Bitmap拷贝进去,传送给DrawBitmap。这可不是只会拷贝几个字节那么简单,而且
                                  ~~~~~~~~~~~~~~~~~~~
CBitmap的所有内容,包括里边的m_Buffer都会拷贝。
~~~~~~~~~~~~~~~~~~~~~~~

画~~~线的部分有误。

创建一个临时的CBitmap object的时候是不会拷贝m_Buffer中的内容的,因为默认的copy constructor只是简单的讲对象的位串拷贝(to 新手:copy constructor是拷贝构造函数,也可译为复制构造函数,顾名思义,就是复制对象的时候会调用这个函数,他默认的行为是拷贝对象的位串),m_Buffer只是一个地址,而数组中的东西是不会拷贝的,不过,这样传递参数也会有问题,什么问题?

考虑如下情况:

class A {
private:
    int[] a;
};

void f(A a) {}

int main() {
    A a;
    f(a);
}

在运行的时候,这个程序会产生运行时异常.

为什么?

1.对象的作用域;
2.类的析构函数;
3.函数的传参方式。

如果新手不懂的话,我给了你这几个关键字,你可以看看书,思考思考。

6

主题

65

帖子

67

积分

注册会员

Rank: 2

积分
67
发表于 2007-10-27 10:58:00 | 显示全部楼层

Re:C++基本功和 Design Pattern系列(1) - Inheritance VS Delegation

Delegation,怎么翻译,我看有的书上,对于一个类作为另一个类的成员的做法,叫做“组合”。

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2007-10-28 19:44:00 | 显示全部楼层

Re: C++基本功和 Design Pattern系列(1) - Inheritance VS Delegation

我是光明show:

纠正一下,昨天的回复有一点小BUG.

考虑如下情况:

class A {
public:
    A(int sz) { a = new int[size = sz]; } // 此处为新加
    ~A() { delete a; } // 此处为新加
private:
    int[] a;
    int size; // 此处为新加
};

void f(A a) {}

int main() {
    A a;
    f(a);
}

在运行的时候,这个程序会产生运行时异常.

为什么?

1.对象的作用域;
2.类的析构函数;
3.函数的传参方式。

如果新手不懂的话,我给了你这几个关键字,你可以看看书,思考思考。

上次回复的时候有点晕,这样才正确。

PS: 我不是来T馆的,只是来讨论一下。
没想到,一发贴就被人黑了号了。也罢,以后不会再发了,看来大家还是比较喜欢崇拜权威。

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2007-10-28 19:47:00 | 显示全部楼层

Re: C++基本功和 Design Pattern系列(1) - Inheritance VS Delegation

我倒,还是写错了点东西,简单的东西不检查还是会错,不好意思了大家!

class A {
public:
    A(int sz) { a = new int[size = sz]; }
    ~A() { delete [] a; } // 此处为改正
private:
    int[] a;
    int size;
};

void f(A a) {}

int main() {
    A a;
    f(a);
}

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2007-10-28 20:38:00 | 显示全部楼层

Re: C++基本功和 Design Pattern系列(1) - Inheritance VS Delegation

刚才又想了想,帖子没错误,是我搞错了,惭愧的紧呐!

m_Buffer这个数组不是动态分配的空间,所以默认复制构造函数复制的时候是把所有数据一起复制了的,刚才写了个程序测了下,确实是这样子,不过,我回复里提的那个问题也是个基础的问题,权当补充吧,从我回复的错误里面也可以学到点东西吧。

再次抱歉!

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2011-6-5 11:01:00 | 显示全部楼层

Re: Re: C++基本功和 Design Pattern系列(1) - Inheritance VS Delegation

songge08: Re: C++基本功和 Design Pattern系列(1) - Inheritance VS Delegation

我倒,还是写错了点东西,简单的东西不检查还是会错,不好意思了大家!

class A {
public:
    A(int ...


擦...C#的东西:int[] a也放到C++里,误导人啊....害我去百度了下...
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-7 22:32

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表