リバースC ++ _構築\破壊、継承

1.コンストラクタ

                              

コンストラクターの特性:

1.クラスと同じ名前
2.戻り値なし
3.オブジェクトの作成時に実行
されます4.主に初期化に使用されます
5.多重定義されている可能性があり、多重定義されている他の関数も多重定義されている可能性があります
6 。コンパイラは、提供する必要があることを必要としません

2.デストラクタ

デストラクタの特性:

1.デストラクタは1つだけで、オーバーロードはありません
。2.パラメータは使用できません。3 .
戻り値は
使用できません。4.主にクリーンアップ作業に使用され
ます。5.コンパイラはこれを提供する必要はありません。

3.継承

1.継承はデータの複製です
2.継承の役割:重複するコードの記述を減らします
3.人は親クラスまたは基本クラスと呼ばれます
4.教師と生徒はサブクラスまたは派生クラス
と呼ばれます5. Tとsはオブジェクトまたは例
6.親クラスのポインターを使用して、子クラスのオブジェクトを指すことができます。

              

        

マルチレベルの継承:

多重継承:

注:コンストラクターは、クラスのオブジェクトを初期化するために使用されます。親クラスの他のメンバーとは異なり、サブクラスは継承できません(サブクラスは、親クラスのすべてのメンバー変数とメンバーメソッドを継承できますが、親クラスのコンストラクターは継承しません)。したがって、サブクラスオブジェクトを作成するときに、親クラスから継承されたデータメンバーを初期化するために、システムはその親クラスの構築メソッドを呼び出す必要があります。

4.演習

演習1

#include"stdio.h"
#include<Windows.h>

struct DateInfo
{
	int year;
	int month;
	int day;

	DateInfo(int year,int month,int day)
	{
		this->year = year;
		this->month = month;
		this->day = day;
	}
	
	DateInfo()
	{
		this->year = 2015;
		this->month = 4;
		this->day = 2;
	}
	

	void SetDay(int day)
	{
		this->day = day;
	}

	int GetDay()
	{
		return day;
	}

	void SetYear(int year)
	{
		this->year = year;
	}

	int GetYear()
	{
		return year;
	}

	void SetMonth(int month)
	{
		this->month = month;
	}

    int GetMonth()
	{
		return month;
	}
};

struct TimeInfo:DateInfo
{
	int hour;
	int minute;
	int second;

	void SetHour(int hour)
	{
		this->hour = hour;
	}

	int GetHour()
	{
		return hour;
	}
	void SetMinute(int minute)
	{
		this->minute = minute;
	}

	int GetMinute()
	{
		return minute;
	}
	void SetSecond(int second)
	{
		this->second = second;
	}

	int GetSecond()
	{
		return second;
	}

};


void Test()
{
	TimeInfo time;
	time.SetHour(12);
	time.SetMinute(23);
	time.SetSecond(34);

	TimeInfo* p1 = &time;
	
	printf("%d %d %d %d %d %d\n", p1->GetYear(), p1->GetMonth(), p1->GetDay(), p1->GetHour(), p1->GetMinute(), p1->GetSecond());

	DateInfo* p2 = &time;

	printf("%d %d %d %d %d %d\n", p2->GetYear(), p2->GetMonth(), p2->GetDay());	
}

int main()
{
	Test();
	return 0;
}

演習2

#include"stdio.h"
#include<Windows.h>

struct MyString
{
	char *arr;
	MyString(int n)
	{
		arr = (char*)malloc(n);
	}
	MyString()
	{
		arr = (char*)malloc(1024);
	}
	~MyString()
	{
		printf("析构函数执行了");
		free(arr);
		arr = NULL;
	}
	void SetString(char* str)
	{
		strcpy(arr, str);
	}
	void PrintString()
	{
		puts(arr);
	}
	void AppendString(char* str)
	{
		strcat(arr, str);
	}
	int Size()
	{
		return strlen(arr);
	}
};

void test()
{
	char arr1[] = "sunr.";
	char arr2[] = "~";

	MyString MyStr;

	MyString* p = &MyStr;

	p->SetString(arr1);

	p->PrintString();
	
	printf("Size: %d\n", p->Size());

	p->AppendString(arr2);

	p->PrintString();

	printf("Size: %d\n", p->Size());

}

int main()
{
	test();

	return 0;
}

元の記事を20件公開 Likes2 訪問数633

おすすめ

転載: blog.csdn.net/z17805008775/article/details/105628979