C++40个入门知识点

C++40个入门知识点,第1张

C++40个入门知识点

1.知识点总结:
(1)运行时子类的继承部分指针指向父类地址,父类所有成员都包含在子类中,但由于可见性的设置,只可以看到没有限制的成员

//继承的可见性在何时做的检查?
//是由编译器在编译时刻做的限制,本质上可以在运行时可以通过指针修改
//继承时父类将所有成员赋给了子类,继承部分指针指向父类的内存
//但是由于可见性问题,只能看到没有做限制的成员

从下图&stu指针指向的内存可以看到,子类中包含了父类的内容

(2)如何在运行后修改指针内数据?

	//取stu中 m_nszName[255]:&stu取地址,(char*)&stu强制转换为char*
	//((char*)&stu + 8) m_nszName前有public和protected8字节
	//(int*)((char*)&stu + 8)取地址到p
	int* p = (int*)((char*)&stu + 8);
	//p指向的内容修改为123;
	*p = 123;

运行之后可以看到m_nszName[255]的第一个数据被修改为123

(3)指针转换的安全性

//子类指针转换为父类指针(安全),可以说学生都是人
	CPerson* pPer = &stu;

	//父类指针转换为子类指针(不安全),但是不能说人都是学生
	//CStudent* pStu =(CStudent*)&per;

2.学习视频地址:从内存角度看继承
3.学习笔记:

#include 

//面向对象:继承
//继承的可见性在何时做的检查?
//是由编译器在编译时刻做的限制,本质上可以在运行时可以通过指针修改
//继承时父类将所有成员赋给了子类,继承部分指针指向父类的内存
//但是由于可见性问题,只能看到没有做限制的成员

class CPerson 
{

public:
	CPerson() {

	}

	~CPerson() {

	}

	int GetGender() {

		return m_nGender;
	}

	void SetGender(int nGender) {

		m_nGender = nGender;
	}
//父亲公有的都可以访问
public :
	int m_nPublic;

//父亲的家族财产给儿子继承
protected:
	int m_nProtected;

//父亲的私有财产不能给儿子继承
private:

	char m_nszName[255];
	int m_nGender; 


};

//父类的继承也有三种属性
class CStudent :public CPerson
{
public:
	CStudent(){
		m_nPublic = 1;
		m_nProtected = 1;//类域内部可以访问父类的保护成员
	}

	~CStudent() {

	}

private:

	int m_nStuID;
};

//增加老师管理系统,老师的数据与行为和学生是类似的,但也有学号,老师号的不同
//如果重建一个老师类就会造成冗余,易造成错误
class CTeacher :public CPerson
{
public:
	CTeacher() {

	}

	~CTeacher() {

	}

private:

	int m_nTeaID;
};


int main(int argc,char* argv[])
{
	int nPerSize = sizeof(CPerson);

	int nStudent = sizeof(CStudent);

	CPerson per;
	CStudent stu;

	//取stu中 m_nszName[255]:&stu取地址,(char*)&stu强制转换为char*
	//((char*)&stu + 8) m_nszName前有public和protected8字节
	//(int*)((char*)&stu + 8)取地址到p
	int* p = (int*)((char*)&stu + 8);
	//p指向的内容修改为123;
	*p = 123;

	//指针转换的安全性
	//子类指针转换为父类指针(安全),可以说学生都是人
	CPerson* pPer = &stu;

	//父类指针转换为子类指针(不安全),但是不能说人都是学生
	//CStudent* pStu =(CStudent*)&per;

	return 0;
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4950032.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存