1. 程式人生 > >C++派生類的建構函式和複製控制

C++派生類的建構函式和複製控制

派生類的建構函式和複製控制成員不能繼承,每個類定義自己的建構函式和複製控制成員,像任何類一樣,如果類沒有定義自己的建構函式和複製控制成員,編譯器自動合成。

1.建構函式

派生類的建構函式先要初始化基類的成員,然後初始化本類的成員

下面定義一個Father類,標頭檔案如下:

#if !defined(AFX_FATHER_H__C5B84CD6_0B79_4806_BEDA_035EB4183F8B__INCLUDED_)
#define AFX_FATHER_H__C5B84CD6_0B79_4806_BEDA_035EB4183F8B__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <string>
class Father  
{
public:
	Father();
	Father(std::string job,std::string address);
	virtual ~Father();
	virtual void sayHello();
	std::string job;
	std::string address;

};

#endif // !defined(AFX_FATHER_H__C5B84CD6_0B79_4806_BEDA_035EB4183F8B__INCLUDED_)


原始檔如下:

#include "Father.h"
#include<iostream>
Father::Father()
{

}

Father::Father(std::string job,std::string address)
{
	this->job=job;
	this->address=address;
}

Father::~Father()
{

}
void Father::sayHello()
{
	std::cout<<"Hello"<<std::endl;
}


下面寫一個Son類使用public繼承Father,那麼,Son類的建構函式可以如下寫

Son::Son(std::string job,std::string address,std::string pcname,std::string phonename):Father(job,address)
{
	this->pcname=pcname;
	this->phonename=phonename;
}


首先呼叫基類的建構函式,初始化基類的成員。

2.複製建構函式

Son::Son(const Son& ss):Father(ss)
{
	this->pcname=ss.pcname;
	this->phonename=ss.phonename;
}


先呼叫基類的複製建構函式,初始化基類的成員,然後初始化本類的成員

3.賦值操作符

Son& Son::operator =(Son& ss)
{
	Father::operator=(ss);
	this->pcname=ss.pcname;
	this->phonename=ss.phonename;
	return *this;
}


顯式呼叫基類的賦值操作符。