Delphi 학습 4일차
기본 문법에서 실제 응용으로의 과도는 매우 힘들다고 느낀다.
오후에는 효율이 매우 낮아서 줄곧 이 노드에서 갈등하고 있다.
돌파를 하려면 이 고비를 반드시 넘어야 한다.마음을 가라앉히고 천천히 생각하라.다 잘 될 거야.
우선, 돌아가는 문제 하나가 나로 하여금 오랫동안 고민하게 하였는데, 저녁에 마침내 그것을 해결하였다.
1. 귀속 함수의 사용
먼저 코드를 첨부합니다.
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
Alpha:Integer;
procedure Test2(var A:Integer);forward
//Test2
procedure Test1(var A:Integer);
begin
A:=A-1;
if A>0 then
Test2(A); // , Test2
writeln(A);
end;
procedure Test2(var A:Integer); // Test2
begin
A:=A div 2;
if A>0 then
Test1(A); // Test2 Test1
end;
begin
{ TODO -oUser -cConsole Main : Insert code here }
Alpha:=15; // Alpha
Test1(Alpha); // Test1,
end.
출력 결과는 다음과 같습니다.
0
0
0
0
당시 이 결과에 대해 줄곧 이해하지 못했는데, 결과는 왜 0이 아니었을까 생각했다.
나중에 많은 자료를 찾아보고 마침내 깨달았으며 귀속에 대한 이해도 깊어졌다.
먼저 유용한 자료 출처를 동봉합니다: 귀속 상해
함수Test1(15)에서 판단문장을 통해Test1(7),Test1(3),Test(1)가 생성됩니다. 이때Test1(15)의 귀속 호출이 끝나고 출력 결과가 0입니다.이때는 끝나지 않았다.그러면 제어권이 Test1(7)로 돌아갑니다.
같은 위의 과정 출력 결과 0.이런 식으로 유추하면 4개의 0을 얻을 수 있다.
보충 귀속의 기본 원리:
1 함수 호출마다 한 번씩 되돌아옵니다. 프로그램이 특정한 등급의 귀환의 끝에 실행될 때, 이전 등급의 귀환으로 옮겨져 계속 실행됩니다.
2 귀속 함수 중 귀속 호출 전에 있는 문장과 각급 피조 함수는 같은 순서를 가진다.
3 각 단계의 함수 호출은 모두 자신의 사유 변수를 가지고 있다.
4 귀속 함수 중 귀속 호출 문장 뒤에 있는 문장의 집행 순서는 각 호출 함수의 순서와 상반된다.
5 각 단계마다 자신의 변수가 돌아가지만 함수 코드는 복제되지 않는다.
6 귀속 함수에는 귀속 호출을 중지할 수 있는 문장이 포함되어야 한다. 2. 클래스의 정의와 사용 방법
클래스의 사용 절차: (1) 클래스를 설명하는 변수 - - - 클래스를 데이터 형식으로 볼 수 있습니다.(클래스의 변수를 성명한 후에 실제적으로 클래스를 만드는 대상이 아니라 종이 상자와 클래스의 대상을 정의하는 지침을 클래스의 인용이라고 한다) (2) 클래스의 특수한 함수인 구조 함수를 호출하여 초기화 작업을 한다. 예를 들어 클래스의 구조에 따라 메모리 자원을 분배하고 대상의 생성을 완성한다.(3) 클래스의 실례 - 대상을 조작하고 사용한다.대상의 속성을 수정하거나 대상을 호출할 수 있는 방법입니다.(4) 사용이 완료되면 클래스의 또 다른 특수 함수인 분석 함수를 호출하여 창설된 대상을 삭제하고 해당하는 메모리 자원을 방출한다.또한 Free 프로세스를 호출하여 객체가 차지하는 리소스를 방출할 수도 있습니다.
클래스의 정의 형식:
type ClassName=Class(AncestorClass)
Memberlist
end;
클래스의 상속 형식:
type
TForm1=Class(TForm)
end;
program UseClass;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
TPerson=class
public
Name:string;
function GetAge:Integer;
procedure SetAge(A:Integer);
private
Age:Integer;
end;
TEmployee=class(TPerson)
public
Salary:integer;
DeptName:string;
procedure Infor;
procedure SetSalary(A:Integer);
end;
TCustomer=class(TPerson)
public
AddressName:string;
procedure Infor;
constructor Create(Str:string);
destructor Destroy;override;//
end;
function TPerson.GetAge:Integer;
begin
Result:=Age;
end;
procedure TPerson.SetAge(A:Integer);
begin
Age:=A;
end;
procedure TEmployee.SetSalary(A:Integer);
begin
Salary:=A;
end;
procedure TEmployee.Infor;
begin
writeln(' : ',Name,' : ',GetAge,' : ',DeptName,' : ',Salary);
end;
procedure TCustomer.Infor;
begin
writeln(' : ',Name,' : ',GetAge,' : ',AddressName);
end;
constructor TCustomer.Create(Str:string);
begin
inherited Create;
writeln(' 。');
AddressName:=Str;
end;
destructor TCustomer.Destroy;
begin
writeln(' : ',Name,' 。');
inherited Destroy;
end;
var
E1:TEmployee;
C1:TCustomer;
begin
{ TODO -oUser -cConsole Main : Insert code here }
E1:=TEmployee.Create; //
E1.Name:=' ';
E1.SetAge(23); // SetAge, GetAge?
E1.SetSalary(2000); // SetSalary?
E1.DeptName:=' ';
E1.Infor; //
E1.Destroy; //
C1:=TCustomer.Create(' '); // ( )
C1.Name:=' ';
C1.Age:=45;
//
C1.Infor; //
C1.Destroy; // ( )
readln;
end.
결과 출력:
성명: 이병 연령:23부서: 대출부 월급:2000 고객류의 구조 함수 호출.이름:장력연령:45주소:북일로 이름:장력고객류 대상 삭제.위의 절차에 대한 몇 가지 설명:
4
4
4
4
3. 정적 방법의 사용
program Project1;
{$APPTYPE CONSOLE}
type
TPerson = class //
procedure Infor; //
end;
TEmployee = class(TPerson) //
procedure Infor; //
end;
procedure TPerson.Infor; // TPerson Infor
begin
Writeln ('TPerson.Infor');
end;
procedure TEmployee.Infor; // TEmployee Infor
begin
Writeln('TEmployee.Infor');
end;
var
P1: TPerson; //
E1: TEmployee; //
begin
P1:=TPerson.Create;
P1.Infor; // TPerson Infor
P1.Destroy;
P1:=TEmployee.Create;
P1.Infor; // TPerson Infor
TEmployee(P1).Infor; // TEmployee Infor
P1.Destroy;
E1:=TEmployee.Create;
E1.Infor; // TEmployee Infor
E1.Destroy;
end.
실행 결과는 다음과 같습니다.
TPerson.Infor
TPerson.Infor
TEmployee.Infor
TEmployee.Infor
--------------------------------------------------------------------------------
바보같이 분간할 수 없다.
함수와 프로세스의 차이: 프로세스는 되돌아오는 값이 없고 함수는 되돌아오는 값이 있다.
매개변수 전달 순서: Pascal 언어는 왼쪽에서 오른쪽으로 순차적으로 표시됩니다.
구조 함수와 분석 함수, 내가 먼저 생각한 것은create,destroy인데 구체적인 차이에 대해서는 써봐야 알 수 있다.
안녕히 주무세요.
기분 전환, 내일 GO ON.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
예를 들어 urlopen의 데이터 사용법데이터 매개 변수는 선택할 수 있습니다. 데이터를 추가하려면 바이트 인코딩 형식의 내용, 즉bytes 형식이면bytes () 함수를 통해 전환할 수 있습니다. 또한 이 데이터 매개 변수를 전달하면 GET 방식으로 요...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.