類和對象 -----繼承

1:// lesson3.cpp : 定義控制檯應用程序的入口點。


繼承:基類(父類)派生類(子類)

以animal(動物)eatgrassanimal(食草動物)rabbit(兔子)舉例

#include "stdafx.h"
#include <iostream>
using namespace std;


class Animal   //基類
{
public:
Animal(){ cout << "animal的默認構造函數" << endl; }
Animal(int age){ m_age = age; cout << "animal的定義構造函數"<< endl; }
int getAge(){ return m_age; }
void run(){ cout << "animal run" << endl; }


private:

int m_age;


protected:


};


//繼承的3中方法,public protected  private    不管是哪一種繼承,子類都包含了父類的所有的屬性和方法

不同點在於子類對於父類的訪問權限不同


class EatGrassAnimal : public Animal  //派生類
{
public:
EatGrassAnimal(int age);
void eat(){ cout << "I am eat grass" << endl; }
int getAge(){ return m_age; }
private:
int m_age;


protected:


};
EatGrassAnimal::EatGrassAnimal(int age) :Animal(age)        //構造函數初始化時  先執行初始化列表在執行函數體內部
{
m_age = 20;                                        派生類中初始化父類的數據成員,當然子類也可以繼續添加,初始化自己的數據成員
}
class Rabbit : public EatGrassAnimal
{
public:
Rabbit(int age);
int getAge(){ return m_age; }
private:
int m_age;


protected:


};
Rabbit::Rabbit(int age) :EatGrassAnimal(age)           這個地方子類只能調用自己的父類的構造函數,不能越級調用animal類
{
m_age = 30;
}
int _tmain(int argc, _TCHAR* argv[])
{

Rabbit rabbit(2);                       rabbit類定義了一個對象,構造函數調用的順序,先調用animal類,在調用eatgrassanimal  後調用rabbit類,析構函數調用的順序與構造函數      相反

    rabbit.run();
    rabbit.eat();


cout << rabbit.getAge() << endl;                                   3個類中同時有getage成員函數時,就近原則

cout << rabbit.Animal::getAge() << endl;  若想調用具體的某一個類中的成員函數時,前面加類名和類限定符

cout << rabbit.EatGrassAnimal::getAge() << endl; 
cout << rabbit.Rabbit::getAge() << endl;


system("pause");


return 0;
}


3中繼承方式的區別:

如果不申明某種繼承方式時,默認private繼承

public:  父類中的public---->子類中的public       protected->protected          private 不可訪問

protected          public ->protected                     protected->protected          private不可訪問

父類的public變成子類的protected,外部無法訪問

private              public-> private                          protected->protected          private不可訪問


發佈了57 篇原創文章 · 獲贊 10 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章