C++继承相关知识点

C++作为面向对象的语言,类之间可以继承,被继承的类称为基类(父类),产生的新类称为派生类(子类)。

C++的类权限分为三个等级,private(私有的),protect(被保护的),public(公有的)。其相对应的继承的权限也分为相同的三个等级,即private,protect以及public继承。

这三类继承抽象自现实社会的财产继承:

private继承可视为吝啬鬼的继承,将所有继承下来的资源都据为己有,不容外人的窥探,而他本人继承的财产也需遵守父辈的权限。这种继承而来的类所有成员变量和成员函数都变成私有的,外部无法对其调用,只能在类内部通过成员函数调用,其成员函数的调用权限则继承于它的基类,如下方代码所示,m_name,m_age,m_sex三个成员变量在基类(父类)中分别属于private,protect以及public权限,则在派生类(子类),其权限也与基类(父类)相同,m_name属于父类的私有变量,虽然子类继承时包含它,却在子类内部无法被调用。m_age,m_sex作为protect和public变量,可以在子类内部被调用。同样的,在此派生类作为基类被再次继承的时候,它的派生类将遵循此类的权限设定,即所有成员变量都为私有的,只可被继承,不能被调用。

private继承可视为家族式的继承,将除了父辈私有资源之外的资源都变为可传承的资源,同样不容外人的窥探。这种继承而来的类成员变量和成员函数外部同样无法对其调用,只能在类内部通过成员函数调用,其成员函数的调用权限也同样继承于它的基类。在类的内部,其调用与private继承类似,不同的是在此派生类作为基类继承时,其public和protected权限的成员变量都变为protected成员变量被继承,其子类仅可在子类内部调用。

public继承可视为抄袭式的继承,其继承的所有资源与父辈的权限相同,这种继承而来的类成员变量和成员函数,public权限下的成员变量和成员函数可通过外部调用。在类的内部,其调用与protected继承相同。在此派生类作为基类继承时,其public成员变量及函数被继承时仍旧是public权限。

#include <iostream>
#include <string.h>

using namespace std;

class People
{
	string m_name;
public:
	int m_age;
protected:
	string m_sex; 

};


class Student:public People
{
public:
	void set1(string n,int a,string sex);
	void print1();
};

void Student::set1(string n,int a,string sex)
{
	m_age = a;
	//m_name = n;
	m_sex = sex;
}

void Student::print1()
{
	//cout << "m_name = " << m_name << endl;
	cout << "m_age = " << m_age << endl;
	cout << "m_sex = " << m_sex << endl;
}

class Student1:protected People
{
public:
	void set1(string n,int a,string sex);
	void print1();
};

void Student1::set1(string n,int a,string sex)
{
	m_age = a;
	//m_name = n;
	m_sex = sex;
}

void Student1::print1()
{
	//cout << "m_name = " << m_name << endl;
	cout << "m_age = " << m_age << endl;
	cout << "m_sex = " << m_sex << endl;
}

class Student2:private People
{
public:
	void set1(string n,int a,string sex);
	void print1();
};

void Student2::set1(string n,int a,string sex)
{
	m_age = a;
	//m_name = n;
	m_sex = sex;
}

void Student2::print1()
{
	//cout << "m_name = " << m_name << endl;
	cout << "m_age = " << m_age << endl;
	cout << "m_sex = " << m_sex << endl;
}


int main()
{
	People p1;
	Student1 s1;
	Student s;
	Student2 s2;

	s.set1("lzn",20,"m");
	s1.set1("lzn",19,"m");
	s2.set1("lzn",18,"m");
	s.print1();
	s1.print1();
	s2.print1();

	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/david_lzn/article/details/81267835