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

来源:互联网 发布:婴儿背带 知乎 编辑:程序博客网 时间:2024/05/01 22:30
(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 转载请标明来源)


0 0
原创粉丝点击