任務二:
未加virtual
加virtual之後
同名覆蓋原則:基類中的函式和派生類的函式重名時,若未強行指名,則通過派生類物件使用的是派生類的同名成員
二元作用域分辨符:當派生類與基類中有相同成員時,如果要通過派生類物件訪問基類中被隱藏的同名成員,可以用基類名和作用域分辨符來限定
型別相容原則:在需要基類物件的任何地方,都可以使用公有派生類的物件來替代。
派生類的物件可以隱含轉換為基類物件
派生類的物件可以初始化基類的引用
派生類的指標可以隱含轉換為基類的指標
通過基類物件名、指標只能使用從基類繼承的成員。
任務三:
battery.hpp
1car.hpp#ifndef _battery_hpp_
2#define _battery_hpp_
3 #include4
class
battery
9int get_capacity() const
12};
1314
#endif
1electriccar.hpp#ifndef _car_hpp_
2#define _car_hpp_
3 #include4 #include56
using
namespace
std;78
class
car ;
1718 car::car(string maker1, string model1, int
year1) :
19maker(maker1), model(model1), year(year1)
2223
void
car::info()
29void car::update_odometers(int
m) 36
37#endif
1task3,cpp#ifndef _electriccar_hpp_
2#define _electriccar_hpp_
3 #include4 #include"
battery.hpp
"5 #include"
car.hpp
"6 #include78
class electriccar : public car, public
battery ;
1516 electriccar::electriccar(string maker1, string model1, int year1, int
c) :
17car(maker1, model1, year1), battery(c) {}
1819
void
electriccar::info()
2324
#endif
1 #include2 #include"實驗結果截圖:electriccar.hpp"3
intmain()
任務四:
pets.hpp
1task4.cpp#ifndef _pets_hpp_
2#define _pets_hpp_
3 #include4 #include5
using
namespace
std;67
class
machinepets
12virtual
string
talk()
15string get_nickname() const
16};
1718
class petcats : public
machinepets
21string
talk()
24};
2526
class petdogs : public
machinepets
29string
talk()
32};
3334
#endif
1 #include2 #include"實驗結果截圖:pets.hpp"3
4void play(machinepets *ptr) 78
intmain()
實驗4 繼承
task2 原 include include 歸納總結 同名覆蓋原則 當派生類的函式名或者成員名與基類的函式名或成員名發生重複 哪怕它們形參列表不同 將自動隱藏其父類的同名函式或物件,要使用其父類對應的函式或成員需要用父類作用域來進行說明。二元作用域分辨符 即 是雙目運算子,常用於 類名 成員,表...
實驗4 繼承
task2.cpp include include definitation of graph class graph definition of rectangle,derived from graph class rectangle public graph definition of circ...
實驗4 繼承
task2.cpp原始碼 include include definitation of graph class graph definition of rectangle,derived from graph class rectangle public graph definition of c...