程序设计--各类语言风格

   
c++
delphi
c#
java
风格
入口
默认有个入口类,包含入口函数Main();
 
类存放
这里一个文件是一个单元(Unit);
里面存放很多类,类名和单元名并无关系。
概念上更对应java里的包。
类存放
一个文件可以存放很多类。
大都有个主类和文件名一直。
但不一致好像也可以
 
 
括号
调用属性不用加括号。
方法,类后面要带括号
入口-很独特,
每个类都可以单独运行,
每个类都可以有入口函数main()
 
类存放
一个文件只能存放一个主类。
主类名和文件名也要一致。
再写入的类只能裸申明class Hero,一般不用
然后差不多功能就放在一个包名中。
同个包中可以直接调用。
其它包中要import下。
 
括号  和C#一样?
引用
程序内部文件的引用
 
外部控件或者sdk之类的引用
 
 
一个控件往往包含很多子项目
通过一个头文件,里面专门放所有的子项目头文件。
 
c 还没有集合标签。
通过自己建一个头文件来集合需要的头文件。
 
c#这些,代码文件形成了集合标签结构。
引用这个集合标签就行。
 
c# namespace
 
java package
这里文件夹和包名结构是层层对应的。
   
会生成一个包,里面再包含子项目
1.简单替换
 
2.条件编译
1.1#define MAXTIME 1000
编译器会对MAXTIME进行处理替换为1000。
CONST 则为一个常量。
1.2 #define Add(a,b) a+b;
 
2#ifdef WINDOWS
......
#endif
好像只有条件编译
   
变量
 
没初始化的时候好像是一个随机地址,
并不是NULL,要自己初始化。
 
引用类型,默认是null
 
函数
内联
--编译器会把函数代码
展开到调用层运行。省了出栈入栈这些。
     
JVM自动控制,代码无法声明
 
实例化
一般是先申明,再写个实例化代码
静态语言一般有两种方式。
A-在栈中分配,xx.create,对象类
B-在堆中分配。new xx,指针类
B中分配要自己来释放。、
 
动态语言一般都是自己释放。
ins=new class.
 
类的实例化
A-很简洁 Class Obj;
就一个申明,后续也不用实例化代码的。。
B
 
 
类方法调用
obj.fun()
如果是类指针则
pobj->fun()
 
一般局部用A,全局可用的基础类。占了两头?
需要在各个部件传来传去,分别保存的用B合适。
感觉大部分中间逻辑都是用B。
   
更加面向对象。同时类的创建更加多样。
赋值一个点击事件用类。
可以单独建一个事件类,然后引用。
可以建一个内部类。
可以建一个匿名类。
可能编译后还就是执行匿名类里的流程。
 
内部类可以访问到外部类的资源,
线程
   
Timer定时器这种,好像都是直接用的,没觉的是在线程里。
 
线程用的更普遍
更新主页面经常就是要在线程里handler.post()
继承
 
class C1:public C0
TC1 = class(TC))
   
模板类
参数通用类型。
实例化的时候再指定。
template<class Type> class C1
 
template<class BASE_CLASS, class TYPE>
 
class : public BASE_CLASS
BASE_CLASS是数组类,如CObArray。
 
里面的方法基本都是调用BASE_CLASS。只是 的时候声明下这个是Type类。
没发现有啥大用处。。
 
 
CTypedPtrArray<CObArray,CComponent*> m_LadderGroup
好像没类似的,缺乏泛型?
class Dictionary<TKey, TValue>
 
Dictionary<string, string> cols= new Dictionary<string, string>();
 
 
属性,方法调用
C1.P1
     
定义类型
简洁的名称代替冗长的定义。
 
1.定义基本类,
2.定义 函数指针类型
返回类型(*函数名)(参数表) 
 
3.定义类,c++有模板类,用处多些。
typedef
typedef __nullterminated CONST CHAR *LPCSTR,   
 
2.
typedef BOOL (WINAPI *PFSETWINDOWTEXTA)(HWND hWnd, LPSTR lpString);
 PFSETWINDOWTEXTA pFun;
3.
typedef basic_ofstream<wchar_t, char_traits<wchar_t> >  ofstream;
type
1. tmyint=integer; 
 
TFrameRecord=record
Data:string;
end
 
TFrameList=array of TFrameRecord;
2
TLedStateEvent = procedure(Sender: TObject; AState: TLedState) of object;
   
操作符
         
 
>>,<<
流向箭头的方向.
输出流-
ofs << lpString << endl;相当于字符串连接。
输入流-
cin >> dbfilename;
     
 
::
调用类的静态方法,属性
不需要实例化类,直接调用?
CA::FA
 
全局作用域符号
 char    zhou; 
class{
::zhou
}
 
作用域分解运算符-在类外定义类里的声明
 
class CA {
public:
  int add(int a, int b);
};
//那么在实现这个函数时,必须这样书写:
int CA::add(int a, int b)
{
  return a + b;
}
 
c#中partial class 类定义外面还能附加方法。
这个方法声明还是在类里的,只是实现放在外面。
没有那么动态。
     
字符串
 
typedef CHAR *PCHAR,
typedef __nullterminated CHAR *LPSTR
指向/0结尾的字符串?
typedef __nullterminated CONST CHAR *LPCSTR
指向常量字符串
 
MFC中使用CString
目前规范中用std:string
 
转换
string s="abcde";
const char *c = s.c_str();
const不能被修改,用strcpy复制一份。
 
char *cStr = "C++";
std::string Str = std::string(cStr);
https://wiki.jikexueyuan.com/project/visual-studio/1.html
     
指针,地址
 
地址,内容,指向
基本变量 int i
  取自身地址 &i 
取内容 i
指针变量 int *pi
  赋值
取自身地址 &pi  
取指向地址 pi
   取指向内容 *pi
 
二级指针int **ppi
赋值 **ppi=&pi
取指向地址 ppi
 取指向内容=取前序指向地址 *ppi
去前序指向内容 **ppi
 
*ppi改变后,pi也会改变。
指针数组 int *pa[]
pa[i]==pi
cout << *ptr[i] << endl;
 
但是 char * pArray[] ={"apple","pear"}
std::cout << pArray[i] << std::endl; 不需要加*。
  可能cout默认会按字符处理吧。
  如果要获取地址。printf("%p",pArray[1])
 
数组 int *pi,ai[]={1,2,3}
pi=ai;
 
    
结构体指针 一般都是 typedef 先定义好的
指针类型转换,步长会不一样。
取地址 i:integer;
去地址@i;
 
指针变量 pi:^integer;
一般都是定义好了PInteger=^integer;
取指向内容pi^
 
 
二级指针
PPChar=PChar^
 
 
 
 
java创建类是默认指针类型
但好像这个指针又是受限的。
集合类型
       
List
List是个接口类,一般是用ArrayList。
 
结构类型
 
字典类
Hashtable
           

posted @ 2021-08-12 10:15  shijianbo  阅读(141)  评论(0)    收藏  举报