重载、覆盖、隐藏、多态举例说明

例子一:

class A

{

 public:

 A(int m);

int setValue(int mval);

void setValue();


private:

int m_data;               

}

分析:该类中, 函数setValue(int mval) 和 函数setValue()为重载成员函数。因为,函数名相同,参数不同,在同一个类作用域中,两函数构成重载成员函数。注意:重载函数必须在相同的作用域中。

总结: 

重载函数几个 条件:

1. 相同作用域  

2. 同函数名 

3. 参数不同(类型、个数、顺序) 

4. 有没有virtual均可


例子二:

class  A

{

 public:

 A(int m);

virtual int setValue(int mval);


private:

int m_data;

}


class B : public A

{

public:

B(int a, float b,int c);

virtual int setValue(int nval);


private:

float m_value;

int   m_cal;

}

分析:派生类B中 setValue函数 覆盖了 基类A中setValue函数。因为两个类中函数名相同,参数相同,基类成员函数为虚函数。

总结:

构成覆盖的几个条件:

1. 不同作用域(基类和派生类) 

2. 同函数名 

3. 相同函数参数 

4.基类成员函数为虚函数。


例子三:

class  A

{

 public:

 A(int m);

virtual int setValue(int mval);


private:

int m_data;

}


class B : public A

{

public:

B(int a, float b,int c);

virtual int setValue(float nval);


private:

float m_value;

int   m_cal;

}

分析: 派生类B中setValue函数 隐藏了 基类A中setValue函数。因为两类中,函数名相同,函数参数不同,虽然都有virtual,但仍为隐藏,注意与覆盖相区别。


例子四:

class  A

{

 public:

 A(int m);

 int setValue(int mval);


private:

int m_data;

}


class B : public A

{

public:

B(int a, float b,int c);

int setValue(float nval);


private:

float m_value;

int   m_cal;

}

分析: 派生类B中setValue函数 隐藏了 基类A中setValue函数。因为两类中,函数名相同,函数参数不同,虽然都没有virtual,但仍为隐藏,注意与重载相区别。


例子五:

class  A

{

 public:

 A(int m);

 int setValue(int mval);


private:

int m_data;

}


class B : public A

{

public:

B(int a, float b,int c);

int setValue(int nval);


private:

float m_value;

int   m_cal;

}

分析: 派生类B中setValue函数 隐藏了 基类A中setValue函数。因为两类中,函数名相同,函数参数相同,虽然都没有virtual,但仍为隐藏,注意与覆盖相区别。

综合例子三、四、五

总结:隐藏有以下三种情况:

1.  不同作用域(基类和派生类), 同函数名,同参数,基类没有virtual,为隐藏。(区别于覆盖)

2. 不同作用域(基类和派生类),同函数名,不同参数,基类有virtual,为隐藏。(区别于重载)

3. 不同作用域(基类和派生类),同函数名,不同参数,基类没有virtual,为隐藏。(区别于重载)








评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值