// 对继承的深刻了解
#include <iostream>
using namespace std;
// 定义类
class Animal
{
public:
Animal(int x, int y) // 定义构造函数:修改 将无参改为有参
{
cout << "Animal construct" << endl;
}
~Animal() // 定义析构函数
{
cout << "Animal deconstruct" << endl;
}
void eat()
{
cout << "Animal eat" << endl;
}
private:
void sleep()
{
cout << "Animal sleep" << endl;
}
protected:
void speak()
{
cout << "Animal speak" << endl;
}
}; // 注意;号不要忘
class Fish : public Animal // 继承,使得代码重用
{
public:
// Fish()
Fish():Animal(10, 10),a(1) // 修改后的子类的构造函数:在子类中,向基类带参数的构造函数传递参数的一种方式;后加对常量的初始化
{
cout << "Fish construct "<< a << endl;
}
~Fish()
{
cout << "Fish deconstruct" << endl;
}
private:
const int a;
};
void main()
{
Animal al(5, 6);
al.eat();
Fish fh;
fh.eat();
}
/*
小结:
1、没有父类就没有子类,所以都是从父到子的(如果是按这个顺序的话)
2、构造函数调用了父类的,还在调用子类的
3、将父类的构造函数从无参该为有参,则在子类中,需对子类的构造函数进行修改
修改方法见上,一个无参一个有参,则调用的顺序为:子类构造函数(但不进行函数体就转向调用基类的“默认”构造函数)、基类构造函数、子类构造函数
默认:当声明基类对象时,要从基类先调用父类的 默认构造函数 而现在父类中没有 不带参数的 构造函数 ,所以在
子类中,必需对构造函数进行修改,见原程序
4、默认的构造函数就是不带参数的构造函数
*/
#include <iostream>
using namespace std;
// 定义类
class Animal
{
public:
Animal(int x, int y) // 定义构造函数:修改 将无参改为有参
{
cout << "Animal construct" << endl;
}
~Animal() // 定义析构函数
{
cout << "Animal deconstruct" << endl;
}
void eat()
{
cout << "Animal eat" << endl;
}
private:
void sleep()
{
cout << "Animal sleep" << endl;
}
protected:
void speak()
{
cout << "Animal speak" << endl;
}
}; // 注意;号不要忘
class Fish : public Animal // 继承,使得代码重用
{
public:
// Fish()
Fish():Animal(10, 10),a(1) // 修改后的子类的构造函数:在子类中,向基类带参数的构造函数传递参数的一种方式;后加对常量的初始化
{
cout << "Fish construct "<< a << endl;
}
~Fish()
{
cout << "Fish deconstruct" << endl;
}
private:
const int a;
};
void main()
{
Animal al(5, 6);
al.eat();
Fish fh;
fh.eat();
}
/*
小结:
1、没有父类就没有子类,所以都是从父到子的(如果是按这个顺序的话)
2、构造函数调用了父类的,还在调用子类的
3、将父类的构造函数从无参该为有参,则在子类中,需对子类的构造函数进行修改
修改方法见上,一个无参一个有参,则调用的顺序为:子类构造函数(但不进行函数体就转向调用基类的“默认”构造函数)、基类构造函数、子类构造函数
默认:当声明基类对象时,要从基类先调用父类的 默认构造函数 而现在父类中没有 不带参数的 构造函数 ,所以在
子类中,必需对构造函数进行修改,见原程序
4、默认的构造函数就是不带参数的构造函数
*/
If you want something , just do it ,and it`s a long time !