(1)当定义一个新的类时,发现该具备之前的某一个的基本性及方法时,就可使用继承技术
(2)意义:减少代码重复率
(3)语法:
class A: <继承权限> <类名>,<继承权限> <类名>
{
}
例如:
class A: pub1ic B,public C
{
}
(4)在继承关系中:被继承的类称为父类(基类),继承后的类称为子类(派生类);实例化一个子类时, 需要先构造父类,再构造子类,析构顺序相反
注意:
1、如果子类出现与父类同名的成员属性,父类的属性将被隐藏,所以子类对象直接访问的话,访问的是自己的。当然可以指定访问父类属性
访问子类:
obj . age
访问父类:
obj . Base: :age
代码:
#include <iostream>
using namespace std;
class Animal
{
public:
Animal():a_kind(""),a_age(0)
{
cout<<"no agr animal constructor"<<endl;
}
Animal(string kind,int age):a_kind(kind),a_age(age)
{
cout<<"have agr animal constructor"<<endl;
}
void AnimalInfo()
{
cout<<this->a_kind<<endl;
cout<<"animal:"<<this->a_age<<endl;
}
string a_kind;
int a_age;
};
class Cat:public Animal
{
public:
Cat():c_kind(""),c_color(""),Animal("kind",9)
{
//Animal("kind2", 14); //匿名对象,没有意义
cout<<"no agr cat construct"<<endl;
}
Cat(string kind,string color):c_kind(kind),c_color(color)
{
cout<<"have agr cat construct"<<endl;
a_age=1;
a_kind="animal";
}
void CatInfo()
{
cout<<c_kind<<endl;
cout<<c_color<<endl;
cout<<"cat:"<<a_age<<endl;
}
string c_kind;
string c_color;
};
void test01()
{
Cat c1("加菲","green");
c1.a_age=2;
c1.a_kind="哺乳类";
//c1.CatInfo();
c1.AnimalInfo();
}
void test02()
{
Cat c2;
c2.a_age=2;
c2.Animal::a_age=3;
c2.AnimalInfo();
c2.CatInfo();
}
int main(int argc, char *argv[])
{
//test01();
test02();
return 0;
}