我们知道,在类中一共有三种类型,分别为public,private和protected,默认为private,在结构中,默认是public
可见,在一个类中,只有类内的成员才可以访问private
继承允许我们依据一个类来创建一个类,这个已有的类称为基类,新创建的类称为派生类
class derived-class: access-specifier base-class1,access-specifier class2 ......
#include using namespace std;// 定义基类
class Student
{
public:char name;private:int age;protected:double height;
};
//
// public继承:可以访问public,portected
// public-->public
// protected-->protected
class Public : public Student
{
public:void set_name(char name);char get_name(void);
};void Public::set_name(char na)
{name = na;
}char Public::get_name()
{return name;
}
//// private继承:可以访问public,portected
// public-->private
// protected-->private
class Private : private Student
{
public:void set_name(char name);char get_name(void);
};void Private::set_name(char na)
{name = na;
}char Private::get_name()
{return name;
}
/
// protected继承可以访问public,portected
// public-->portected
// protected-->portected
class Protect : protected Student
{
public:void set_height(double hei);double get_height(void);};void Protect::set_height(double hei){height = hei;
}double Protect::get_height(void){return height;
}///
int main()
{Public student1;student1.set_name('a');cout << "name of student1:" << student1.get_name() << endl;Private student2;student2.set_name('b');cout << "name of student2:" << student2.get_name() << endl;Protect student3;student3.set_height(30.0);cout<<"height of student3:"<< student3.get_height()<
name of student1:a
name of student2:b
height of student3:30
有时候,一个派生类可以从多个基类中继承,这种继承方式称为多继承
class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…
{
<派生类类体>
};
#include using namespace std;// 基类1
class Shape
{
public:void set(double w, double h);protected:double height;double weight;
};void Shape::set(double w, double h)
{height = h;weight = w;
}// 基类2class Cost
{
public:double cost(double area);
};double Cost::cost(double area)
{return area * 100;
}
// 派生类
class Rectangle : public Shape, public Cost
{
public:double get_area();
};double Rectangle::get_area()
{return height * weight;
}int main()
{Rectangle rec;rec.set(20.333, 2.22323);double area = rec.get_area();cout << rec.cost(area) << endl;return 0;
}