【自我笔记之C++】话说继承

1、public、protected、private 指定继承方式

【自我笔记之C++】话说继承_第1张图片

 1.基类成员在派生类中的访问权限不得高于继承方式中指定的权限

 即继承方式中的public、protected、private是用来指明基类成员在派生类中的最高访问权限。

 2.无论继承方式如何,基类中的private成员在派生类中始终不能使用

 3.如果让基类的成员既不能通过对象访问,还能在派生类中使用,只能申明为protected。

**虽然基类中的private不能在派生类中使用,实际上,基类的private成员是能被继承的,并且(成员变量)会占用派生类对象的内存,仅仅只是在派生类不可见,导致无法使用。

 

2、基类、派生类

派生类在继承基类的普通成员函数,类的构造函数不能被继承,因为派生类的名字不同,不能成为派生类的构造函数,也不能成为普通的成员函数,所以需要派生类的构造函数来初始化继承过来的成员变量,但是大部分的基类都有private属性的成员变量,所以,我们有个思路:在派生类的构造函数中调用基类的构造函数,写在初始化列表里

          若A-->B-->C  先顺序构造ABC,再逆序析构C-->B-->A

 

3、用指针来突破类中的权限

#include 
using namespace std;

class People{
protected:
	char *m_name;
	int m_age;

public:
	People(char *name, int age):m_name(name), m_age(age){}
};

class Student: public People{
private:
	float m_score;

public:
	Student(char *name, int age, float score):People(name, age), m_score(score){}
	void display();
};

void Student::display()
{
	cout<display();
	char *p = *(char**)((char*)s+0);//指针的偏移,下图更好理解
	cout << p << endl;
	return 0;
}

利用指针,只要了解类中的对象内存布局,通过指针偏移就可以访问

是指针太强大了,也是C语言的一个bug

【自我笔记之C++】话说继承_第2张图片

指针偏移:

【自我笔记之C++】话说继承_第3张图片

你可能感兴趣的:(【自我笔记之C++】话说继承)