📄 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;//错误!!碰到是Father的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 + -