?? son.cpp
字號:
#include "stdafx.h"
#include <typeinfo>
#include "son.h"
int Son::m_s=24;
Son::Son() //一定在冒號這里先調用了Father::Father(),生成子對象的“父類成員”
{//若父類沒有寫缺省con(),即Father(void),則報錯!
cout<<"Son default init"<<endl;
m_a=100;//default m_a is that:Son.m_a,so "Son.m_a"=100;Son.Father::m_a=8;
m_d=120;
//p=new Father[10];
}
Son::Son(Son &son):Father(son)
{ //如果不寫Father(son),則一定是強行調用了Father(),
//那么this->Father::m_a!=son.Father::m_a;
//總之,有繼承時,各種con()一定要在::后跟相應的con()
cout<<"the Son copy construct init"<<endl;
this->m_a=son.m_a;//成員由this的類型決定,所以不是Father::m_a!!!
this->m_d=son.m_d;
this->m_s=son.m_s;
}
Son::~Son()//如果有諸如int *p的成員,則一定要寫~Son()
{
//如果有諸如int *p的成員,則一定要寫 delete ([])p;
}
Son & Son::operator =(const Son &son)
{
cout<<"the son function ="<<endl;
if(this==&son)
{
return *this;
}
else
{//有繼承時,==函數一定要在此寫下面第二條語句,不寫,則this->Father::m_a!=son.Father::m_a;
// 如果用單個的賦值,碰到是Father的private成員,就沒辦法了!
// this->Father::m_a=son.Father::m_a;//錯誤?。∨龅绞荈ather的private成員,沒辦法
//而且,只能這樣寫
//Father::operator =(son); //正確!
this->m_a=son.m_a;
this->m_d=son.m_d;
this->m_s=son.m_s;
return *this;
}
}
void Son::SetA(int FatherA,int SonA)
{ //間接調用父類的函數SetA,進入之后的this對成員沒有多態,所以按this 的類型即父類型來確定
//成員,則比如為Father::m_a
Father::SetA(FatherA);
m_a=SonA;//與Father::SetA()中的m_a=區別
}
void Son::GetName()//virtual function override
{
cout<<"the son GetName()"<<endl;
}
//reWrite but parameter is not same as the father
void Son::func(float count)
{
cout<<"the son func(float cout)"<<endl;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -