网站空间可以转移吗,网站备案与icp备案,推广网站是什么意思,个人博客网站开发一、继承和派生
1.是什么#xff1f;
C 中的继承是类与类之间的关系#xff0c;与现实世界中的继承类似 例如#xff1a;儿子继承父亲的财产
继承#xff08;Inheritance#xff09;可以理解为一个类从另一个类获取成员变量和成员函数的过程
例如#xff1a; 类B继承…一、继承和派生
1.是什么
C 中的继承是类与类之间的关系与现实世界中的继承类似 例如儿子继承父亲的财产
继承Inheritance可以理解为一个类从另一个类获取成员变量和成员函数的过程
例如 类B继承于类A那么B就拥有A的成员变量和成员函数
在C中派生Derive和继承是一个概念只是站的角度不同 继承是儿子接收父亲的产业派生是父亲把产业传承给儿子
被继承的类称为父类或基类继承的类称为子类或派生类
“子类”和“父类”通常放在一起称呼“基类”和“派生类”通常放在一起称呼
2.为什么
子类除了拥有父类的成员还可以定义自己的新成员以增强类的功能 以达到青出于蓝胜于蓝一代比一代强
以下是两种典型的使用继承的场景
当你创建的新类与现有的类相似只是多出若干成员变量或成员函数时可以使用继承这样不但会减少代码量而且新类会拥有基类的所有功能
当你需要创建多个类它们拥有很多相似的成员变量或成员函数时也可以使用继承。可以将这些类的共同成员提取出来定义为父类然后从父类继承既可以节省代码也方便后续修改成员
下面我们定义一个父类 People然后定义了子类Student
#includeiostreamusing namespace std;//父类基类 Pelple
class People {
private:char *name;int age;public:void setName(char *name) {this-name name;}char *getName() {return this-name;}void setAge(int age) {this-age age;}int getAge() {return this-age;}
};//父类派生类 Student
class Student : public People {
private:float score;public:void setScore(float score) {this-score score;}float getScore() {return this-score;}
};//父类派生类 Staff
class Staff : public People {
private:float money;public:void setMoney(float money) {this-money money;}float getMoney() {return this-money;}
};int main() {// 创建Student学生对象Student boy;boy.setName(小明);boy.setAge(16);boy.setScore(95.5f);cout boy.getName() 的年龄是 boy.getAge() 成绩是 boy.getScore() endl;// 创建Staff员工对象Staff girl;girl.setName(小丽);girl.setAge(18);girl.setMoney(15000.67);cout girl.getName() 的年龄是 girl.getAge() 月工资是 girl.getMoney() \n;return 0;
} 说明
Student 类继承了 People 类的成员同时还新增了自己的成员变量 score 和成员函数 setScore()、getScore()
继承过来的成员可以通过子类对象访问就像自己的一样
继承的一般语法为
class 子类名:继承方式父类名{子类新增加的成员
};
继承方式包括 public公有的、private私有的和 protected受保护的此项是可选的如果不写那么默认为 private
二、在子类的函数中调用父类的成员
1.为什么 既然父类中定义了成员变量、成员函数那么肯定就可以在子类的成员函数中进行使用否则继承就没有意义了
2.使用 this 调用 在子类的函数中调用从父类继承而来的成员变量或成员函数直接使用 this
三、重写
子类定义了与父类相同名字的函数覆盖了父类的这个函数
扩展或者重新编写功能
与重载不同重载是函数名相同但形参不同
注意 被重写的父类成员函数无论是否有重载子类中都不会继承 除非使用了域解析运算符才会调用父类的同名函数子类中想要调用被覆盖的父类成员函数时就需要使用作用域解析运算符 来明确指定调用父类的版本以避免产生歧义或错误。
四、多层继承
就是父类还有父类父类的父类还有父类…
例如你爷爷有1000w那么你爸爸就继承过来了同样的道理 你也可以从你爸爸那里继承得到这笔钱 实例
#include iostreamusing namespace std;class GrandPa {
public:void display() {cout GrandPa::display()\n;}void display_3() {cout GrandPa::display_3()\n;}
};class Father : public GrandPa {
public:void display() {cout Father::display()\n;}void display_2() {cout Father::display_2()\n;}};class Children : public Father {
public:void display() {cout Children::display() \n;// 调用父类的成员函数this-display_2();// 调用被重写的父类成员函数Father::display();// 调用爷爷类中的成员函数this-display_3();// 调用被重写的爷爷类中的成员函数GrandPa::display();}};int main() {Children boy;boy.display();return 0;
} 五、多继承
C 允许存在多继承也就是一个子类可以同时继承多个父类
#include iostreamusing namespace std;class Father {
public:void make_money() {cout 赚钱 endl;}
};class Mother {
public:void make_homework() {cout 做好菜 endl;}
};class Son : public Father, public Mother {};int main() {Son s;s.make_money();s.make_homework();return 0;
} 当多个父类有相同的函数名 注意要在子类中重写这个函数否则会出现编译错误原因是二义性