C++学习笔记之继承

继承:是类之间定义的一种重要关系
按照生活中的思考方式的话,就是继承老一辈的手艺并且在新的一辈中得到创新与传承,这里只不过是用在了类的关系上面,即老类与新类,父类与子类
继承举例:

//写一个继承
//父类
#include<iostream>
using namespace std;
class Father
{
public:
	void fun()
	{
		cout<<"这个是Father的功能"<<endl;
	}

}//子类:访问属性 父类
class Son:public Father
{

};
void text()
{
	Son s;
	s.fun();//这个例子表明,就是可以直接调用子类来访问到父类的东西
}
int main()
{
	text();
	system("pause");
	return 0;
}

以上的例子只是简说,原来子类可以调用一些父类的函数,数据,但不是所有的父类的东西都可以被调用,就下面细说,这个例子只是个入门。

#include<iostream>
using namespace std;
class Father
{
	public:
	Father()
	{
		cout<<"Father的构造"<<endl;
	}
	~Father()
	{
		cout<<"Father的析构"<<endl;
	}
	int a;
	protected:
	int b;
	private:
	int c;
};

class Son:public Father
{
	public:
	Son()
	{
		cout<<"Son的构造"<<endl;	
	}
	~Son()
	{
		cout<<"Son的析构"<<endl;	
	}
};
void text()
{
	Son s;	
}
int main()
{
	text();
	system("pause");
	return 0;
}

这张图片演示了上面的构造和析构函数的运算过程,先父类再子类
在这里插入图片描述
类的访问方式有三种,即public访问,protected访问,private访问
对于继承来说,也有三种,即public继承,protected继承,private继承
用以下表格来说明:
在这里插入图片描述
继承的说明
1,子类可以拥有父类的所有成员变量和成员函数
2,子类可以当作是一个特殊的父类
3,子类对象可以当作父类对象来使用
4,子类可以拥有父类没有的方法和属性

最好用public继承,这样可以最大限度保留父类成员的属性

父类和子类有重名的成员,子类对象直接调用用的子类自己的成员
在有重名的情况下,还想调用父类的成员的话,需要在成员前面加父类名::
如:(这样的话,就可以可以处理二义性了)

cout<<s.Father::a<<endl;

多继承:就是子类继承了多个父类,拥有多个父类的功能(强啊!!!!!!)
不过,多继承容易产生二义性,那么这样的话就可以用上面的二义性解决办法就可以了
多继承调用构造函数的顺序是,先继承的先调用,而析构函数是相反的过程

举一个要用的例子:
菱形继承:具体继承过程如下图绘出在这里插入图片描述
从A到D有两条路,那就会调用A两次,解决方法,在B,C类调用A的时候,在前面加virtual
加这个的好处就是追寻基本,调用一次就可以了
出现二义性,依旧是用上面的解决方法。

#include<iostream>
using namespace std;
class A
{
public:
	A()
	{
		cout<<"A构造"<<endl;
	}
	int a=10;
};
class B:virtual public A
{

};
class C:virtual public A
class D:public B,public C
{

}
int main()
{
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_41946168/article/details/105883536