C++類繼承 繼承后函數(shù)的值實(shí)現(xiàn)詳解
類的繼承會(huì)首先尋找基類,若基類未實(shí)現(xiàn),則會(huì)尋找派生類的函數(shù)
1. class繼承,函數(shù)不繼承
#include <stdio.h>
class Base
{
public:
Base(){}
~Base(){}
int a;
void setA()
{
a = 1;
}
};
class A:public Base
{
public:
A(){}
~A(){}
void setA()
{
a = 2;
}
};
class B:public Base
{
public:
B(){}
~B(){}
void setA()
{
a = 3;
}
};
int main()
{
A *ax = new A();
B *bx = new B();
Base *aClass = ax;
Base *bClass = bx;
aClass->setA();
bClass->setA();
printf("a value of a %d\n", aClass->a);
printf("a value of b %d\n", bClass->a);
return 0;
}
運(yùn)行結(jié)果:

2. 函數(shù)和Class都繼承
#include <stdio.h>
class Base
{
public:
Base(){}
~Base(){}
int a;
virtual void setA()
{
a = 1;
}
};
class A:public Base
{
public:
A(){}
~A(){}
virtual void setA()
{
a = 2;
}
};
class B:public Base
{
public:
B(){}
~B(){}
virtual void setA()
{
a = 3;
}
};
int main()
{
A *ax = new A();
B *bx = new B();
Base *aClass = ax;
Base *bClass = bx;
aClass->setA();
bClass->setA();
printf("a value of a %d\n", aClass->a);
printf("a value of b %d\n", bClass->a);
return 0;
}
運(yùn)行結(jié)果:注意派生類中可以不寫virtual,最好寫上,以辨別是函數(shù)繼承

若將2中基類的函數(shù)寫為純虛函數(shù),運(yùn)行的結(jié)果一樣,但是如果基類是純虛函數(shù),派生類必須實(shí)現(xiàn)相應(yīng)的函數(shù)。
class Base
{
public:
Base(){}
~Base(){}
int a;
virtual void setA()=0;
};
3. 類A中不有函數(shù),則繼承自基類
class A:public Base
{
public:
A(){}
~A(){}
};
結(jié)果為:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++實(shí)現(xiàn)并優(yōu)化異常系統(tǒng)
異常處理是C++的一項(xiàng)語言機(jī)制,用于在程序中處理異常事件,下面這篇文章主要給大家介紹了關(guān)于C++中異常的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
linux C++ 獲取文件絕對(duì)路徑的實(shí)例代碼
下面小編就為大家?guī)硪黄猯inux C++ 獲取文件絕對(duì)路徑的實(shí)例代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12
opencv4.5.4+VS2022開發(fā)環(huán)境搭建的實(shí)現(xiàn)
本文主要介紹了opencv4.5.4+VS2022開發(fā)環(huán)境搭建的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02

