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

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

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

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

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

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

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

 

2、基类、派生类

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

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

 

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

#include <iostream>
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<<m_name<<" "<<m_age<<" "<<m_score<<endl;
}

int main()
{
	Student stu("ming", 25, 96.3f);
	stu.display();//普通的只能通过调用成员函数来查看privtae下的数据
	Student *s = new Student("li", 24, 82.4f);//指针
	s->display();
	char *p = *(char**)((char*)s+0);//指针的偏移,下图更好理解
	cout << p << endl;
	return 0;
}

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

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

指针偏移:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值