您的位置:首页 > 其它

零散知识:字节数&CAD图形刷洗&面向对象

2015-06-24 21:52 316 查看
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源)

1. 对齐

---------------------------------------------------

(1) struct A{ char c; double d; short s; int i;} sizeof(A) = 24

(2) char ch[50]; sizeof(ch) =  50

(3) char ch[50]; char *a = ch; sizeof(*a) = 4  (32位CPU下)

(4) Class Test{int a; static double c}; sizeof(Test) =  4;  Test *s; sizeof(s) = 4 (32位CPU下);

(5) Class Test{}; sizeof(Test) = 1 (空类定义的话,也需要地址,所以占用了一个空间)

(6) sizeof(20) = 4

(7) sizeof(20.1) = 8

(8) char(*p)[10];sizeof(p) =  4 // 一个代表指向数组char[10]的指针,像函数指针也是这样定义的 char (*fun)(int, char*) sizeof(fun) = 4

(9) char *p[10]; sizeof(p) =  40 // 代表指向char*的指针数组
这里面有四个概念值:

1.数据类型自身的对齐值:就是上面交代的基本数据类型的自身对齐值。

2.指定对齐值:#pragma pack (value)时的指定对齐值value。

3.结构体或者类的自身对齐值:其数据成员中自身对齐值最大的那个值。

4.数据成员、结构体和类的有效对齐值:自身对齐值 和 指定对齐值 中小的那个值。
第4点指明了:

结构体整体对齐值: min( 自身-结构体或者类的 对齐值, 指定对齐值) 如: pack(8)int/int/int = 12
变量自身对齐值: min( 自身-变量数据类型的 对齐值, 指定对齐值)

2. CAD强制刷新图形

----------------------------------------------------

 // 刷新CAD图形

 if (actrTransactionManager)

 {

  actrTransactionManager->flushGraphics();

  acedUpdateDisplay();

 }
 
查询过滤选项/组码查询:(entget(car(entsel)))

3. CAD的AU论坛

----------------------------------------------------

ARX AU 论坛:
http://forums.autodesk.com/t5/objectarx/bd-p/34
AutoCAD官网技术论坛,英文版的,里面有许多ARX帖子资料。
使用方法: 

在"Search the Community"这一块输入要查询内容的英文单词。
例子:

前段时间我查"acdbrasterimage"相关的贴子,在baidu上基本上查不到,在这里查到挺多。

还有查"subGetOsnapPoints"定义的问题,最终也找到了答案。
注意:

贴子都是英文的
http://forums.autodesk.com/
 
4. 几种设计模式

----------------------------------------------------

Factory: 工厂模式

 Parent::GiveMeFive() = 0;

    Child1::GiveMeFive();

    Child2::GiveMeFive();

 例子:追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM 爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory.

Builder: 建造模式

 A::SayHello();

    B::SayHello();

    Builder()::SayHello("A"/"B");

 例子: MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞掂,这就是我的“我爱你”builder。

FACTORY METHOD: 工厂方法模式

 Parent::GiveMeFive() = 0;

 FactoryMethod::(Parent*)

 例子:请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了。

PROTOTYPE: 原始模型模式

 A::Clone();

 B::Clone();

 C::Clone();

 例子:跟MM用QQ聊天,一定要说些深情的话语了,我搜集了好多肉麻的情话,需要时只要copy出来放到QQ里面就行了,这就是我的情话prototype了
SINGLETON: 单例模式

 protected:A::A()

 static A::GetInstance();

 例子: 俺有6个漂亮的老婆,她们的老公都是我,我就是我们家里的老公Sigleton,她们只要说道“老公”,都是指的同一个人,那就是我(刚才做了个梦啦,哪有这么好的事)
ADAPTER:适配器模式/变压器模式

 A::CovertChsToEng

 A::ConverEngToChs

 例子: 朋友聚会上碰到了一个美女Sarah,从香港来的,可我不会说粤语,她不会说普通话,只好求助于我的朋友kent了,他作为我和Sarah之间的Adapter,让我和Sarah可以相互交谈了(也不知道他会不会耍我)
BRIDGE: 桥梁模式

 A::A("Say Hello")

 B::B("Say Give Me Five")

 C::Public A, B

 例子: 早上碰到MM,要说早上好,晚上碰到MM,要说晚上好;碰到MM穿了件新衣服,要说你的衣服好漂亮哦,碰到MM新做的发型,要说你的头发好漂亮哦。不要问我“早上碰到MM新做了个发型怎么说”这种问题,自己用BRIDGE 组合一下不就行了
COMPOSITE:合成模式

 A::Sell("包子")

 B::Sell("稀饭")

 C::Sell("早餐套餐1"){ A::Sell("包子"); B::Sell("稀饭");}

 例子:Mary今天过生日。“我过生日,你要送我一件礼物。”“嗯,好吧,去商店,你自己挑。”“这件T恤挺漂亮,买,这条裙子好看,买,这个包也不错,买。”“喂,买了三件了呀,我只答应送一件礼物的哦。”“什么呀,T恤加裙子加包包,正好配成一套呀,小姐,麻烦你包起来。 ”“„„”,MM都会用Composite模式了,你会了没有?

DECORATOR:装饰模式

 A::A("车")

 B::Append(A, "车载冰箱")

 C::Append(A, "车载导航")

 例子: Mary过完轮到Sarly过生日,还是不要叫她自己挑了,不然这个月伙食费肯定玩完,拿出我去年在华山顶上照的照片,在背面写上“最好的的礼物,就是爱你的Fita”,再到街上礼品店买了个像框(卖礼品的MM也很漂亮哦),再找隔壁搞美术设计的Mike设计了一个漂亮的盒子装起来„„,我们都是Decorator,最终都在修饰我这个人呀,怎么样,看懂了吗?
FACADE: 门面/外观模式

 A::Set1 A::Set2 A::Set3 A::Set4

 B::CreateSimpleA();

 C::CreateProfessionalA()

 例子: 我有一个专业的Nikon相机,我就喜欢自己手动调光圈、快门,这样照出来的照片才专业,但MM可不懂这些,教了半天也不会。幸好相机有 Facade设计模式,把相机调整到自动档,只要对准目标按快门就行了,一切由相机自动调整,这样MM也可以用这个相机给我拍张照片了。

 

FLYWEIGHT: 享元模式/最轻量级模式

 

 例子: 每天跟MM发短信,手指都累死了,最近买了个新手机,可以把一些常用的句子存在手机里,要用的时候,直接拿出来,在前面加上MM的名字就可以发送了,再用一个字一个字敲了。共享的句子就是Flyweight,MM的名字就是提取出来的外部特征,根据上下文情况使用。
 
5. 几种STL函数

----------------------------------------------------

accumulate: Accumulate values in range

 计算指定范围元素的累加值(累加value/或内部指定累加) http://www.cplusplus.com/reference/numeric/accumulate/
 例如:<1, 3, 10, 20> 返回34
adjacent_difference: Compute adjacent difference of range

 顺序计算两个元素间的不同,计入到输入result参数中: http://www.cplusplus.com/reference/numeric/adjacent_difference/
 例如<1, 3, 10,20..> 计算result为(2, 7, 10...)
adjacent_find: Find equal adjacent elements in range

 获取第一个值相同的Iter http://www.cplusplus.com/reference/algorithm/adjacent_find/
 例如<10, 20, 10,20..>返回第三个元素
binary_search: Test if value exists in sorted sequence

 检查元素值是否存在 http://www.cplusplus.com/reference/algorithm/binary_search/
 例如:<10, 20> 中找 5 返回false

 true if an element equivalent to val is found, and false otherwise.

 

copy: copy some range of elements to a new location

 把元素copy到另外的里面去 http://www.cplusplus.com/reference/algorithm/copy/?kw=copy
 例如:<10, 20> 复制到另一个array<1, 2, 3>,结果为<10, 20, 3>
copy_backward: copy a range of elements in backwards order

 和copy一样,不过是从后往前copy,注意指定参数时 http://www.cplusplus.com/reference/algorithm/copy_backward/
 例如:<10, 20> 复制到另一个array<1, 2, 3>,结果为<1, 10, 20>
copy_n: copy N elements

 和copy一样,不过不指定endIter,而是指定个数 http://www.cplusplus.com/reference/algorithm/copy_n/
 例如:<10, 20> 复制1个到另一个array<1, 2, 3>,结果为<10, 2, 3>
count: return the number of elements matching a given value

 获取指定值出现在次数
count_if: return the number of elements for which a predicate is true

 获取元素满足指定条件的次数

 

equal: determine if two sets of elements are the same

 检查两组element是否相同 http://www.cplusplus.com/reference/algorithm/equal/
 true if all the elements in the range [first1,last1) compare equal to those of the range starting at first2, and false otherwise.
equal_range search for a range of elements that are all equal to a certain element

 获取elements为指定值的所有元素 http://www.cplusplus.com/reference/algorithm/equal_range/
 

fill: assign a range of elements a certain value

fill_n: assign a value to some number of elements

find: find a value in a given range

find_end: find the last sequence of elements in a certain range

 获取elements中最后一处匹配的输入elements元素位置http://www.cplusplus.com/reference/algorithm/find_end/

 例如:[1,2,3,4,5,1,2,3,4,5]查找[1,2,3],最后一处的出现位置为从第6个元素,返回该元素(从0开始数,也就是5)

 Searches the range [first1,last1) for the last occurrence of the sequence defined by [first2,last2), and returns an iterator to its first element, or last1 if no occurrences are found.

find_first_of: search for any one of a set of elements

find_if: find the first element for which a certain predicate is true

 找出符合指定条件的元素 http://www.cplusplus.com/reference/algorithm/find_if/
 Returns an iterator to the first element in the range [first,last) for which pred returns true. If no such element is found, the function returns last.

6. 面向对像

----------------------------------------------------

面向对像: http://blog.csdn.net/ztj111/article/details/1854611
1封装---2继承---3多态

 
1封装:Encapsulation (数据与接口封装到一体,并且通过设置public/protect/private,对外隐藏数据或接口)
2继承:Inheritance

 2.1继承(泛化):

  2.1.1实现继承: 实现继承是指使用基类的属性和方法而无需额外编码的能力

  2.1.2可视继承: 可视继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力
 2.2组合(聚合):Composition

  2.2.1接口继承: 接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力

  2.2.2纯虚类:
3多态:Polymorphism

 3.1覆盖

  3.1.1虚函数

  3.1.2接口

 3.2重载

  3.2.1同名函数

 重载的实现是:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对于编译器来说是这样的)。

 结论就是:重载只是一种语言特性,与多态无关,与面向对象也无关!引用一句Bruce Eckel的话:“不要犯傻,如果它不是晚邦定,它就不是多态。”
多态的作用是什么呢?我们知道,

封装可以隐藏实现细节,使得代码模块化;

继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。

而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: