前言:
目录
一、什么是继承?为什么会有继承?
不用继承:
#include<iostream>
#include<string>
using namespace std;
class Teacher //教师类
{
public:
void print()
{
cout << _name << endl;
cout << _age << endl;
}
private:
string _name = "zhangsan"; //名字
int _age = 20; //年龄
string _jobid; //工号
};
class student
{
public:
void print()
{
cout << _name << endl;
cout << _age << endl;
}
private:
string _name = "zhangsan"; //名字
int _age = 20; //年龄
string _jobid; //学号
};
int main()
{
Teacher t;
student s;
t.print();
s.print();
return 0;
}
继承:
#include<iostream>
#include<string>
using namespace std;
class Person
{
public:
void Print()
{
cout << "name:" << _name << endl;
cout << "age:" << _age << endl;
}
protected:
string _name = "peter"; // 姓名
int _age = 18; //年龄
};
class Student : public Person
{
protected:
int _stuid; // 学号
};
class Teacher : public Person
{
protected:
int _jobid; // 工号
};
int main()
{
Student s;
Teacher t;
s.Print();
t.Print();
return 0;
}
二、继承的基本概念
2.1 继承的定义
2.2 继承关系和访问限定符
2.3 继承方式所带来的权限问题
描述:
三、基类和派生类的赋值转换
答案是:派生类可以赋值给基类,但是基类不能赋值给派生类
派生类对象 可以赋值给 基类的对象 / 基类的指针 / 基类的引用 。这里有个形象的说法叫切片
或者切割。寓意把派生类中父类那部分切来赋值过去。
如图所示:
下面我们给出赋值各种情况的代码,建议仔细阅读一下:
#include<iostream>
#include<string>
using namespace std;
class Person
{
protected:
string _name; // 姓名
string _sex; //性别
int _age; // 年龄
};
class Student : public Person
{
public:
int _No; // 学号
};
void Test()
{
Student sobj;
// 1.子类对象可以赋值给父类对象/指针/引用
Person pobj = sobj;
Person* pp = &sobj;
Person& rp = sobj;
//2.基类对象不能赋值给派生类对象
sobj = pobj;
// 3.基类的指针可以通过强制类型转换赋值给派生类的指针
pp = &sobj;
Student * ps1 = (Student*)pp; // 这种情况转换时可以的。
ps1->_No = 10;
pp = &pobj;
Student* ps2 = (Student*)pp; // 这种情况转换时虽然可以,但是会存在越界访问的问
//题
ps2->_No = 10; //这就是越界访问的情况
}
四、总结
感谢各位大佬观看,创作不易,还请各位大佬点赞支持一下下呀!!!