声明:
分为下面两种情况:
1、在类的内部进行访问
2、在类对象的内部访问,即主函数中用对象调用函数和数据成员,且对象永远不能访问类的私有成员和保护函数。
继承:
派生类对基类的全部成员函数和数据成员进行全部接受,除过构造函数和析构函数,在派生类中,把基类的函数和数据成员复制了一份。
public继承
在基类当中,只能通过公有方法对私有数据进行操作。派生类公有继承基类时:在派生类内部,可以访问公有方法和保护方法,不能直接访问基类的私有数据,但可以调用公有方法进行访问;在派生类的外部,不能访问私有数据和保护函数,只能调用公有方法。
#include<iostream>
using namespace std;
//1、在类的内部
//2、在类外部,即主函数中
class Base
{
public:
void Show_Base()
{ cout<<"Show() Base"<<endl;}
//公有方法
void setX(int data)
{ x=data; }
protected:
void Print_Base()
{ cout<<"Print() Base"<<endl;}
private:
int x;
};
//公有继承
class D:public Base
{
private:
int y;
public:
void show_D()
{cout<<"show() D"<<endl;
//可以访问保护方法
Print_Base();
}
void setXX(data)
{
y=data;
//x = data;
setX(data);
}
void Print_D()
{ cout<<"Print() D"<<endl;}
};
void main()
{
Base b;
D d;
//不能访问私有数据
//d.x=10;
//不能访问保护方法
//d.Print_Base();
}
private继承
基类的所有方法和数据成员变成了子类的私有部分,对象不能调动私有部分,公有的可以访问私有的
私有成员在私有继承时,在类的内部可以对私有数据(公有方法可访问私有属性)和保护方法进行访问;在类的外部,子类不能对基类的所有方法访问。
#include<iostream>
using namespace std;
//1、在类的内部
//2、在类外部,即主函数中
class Base
{
public:
void Show_Base()
{ cout<<"Show() Base"<<endl;}
void setX(int data)
{ x=data; }
protected:
void Print_Base()
{ cout<<"Print() Base"<<endl;}
private:
int x;
};
//私有继承
class D:protected Base
{
private:
int y;
public:
void show_D()
{cout<<"show() D"<<endl;
Print_Base();
}
//保护的可以访问
void Print_D()
{ cout<<"Print() D"<<endl;}
};
void main()
{
Base b;
D d;
//d.x=10;
//继承过来变成私有的 不能访问
//d.Show_Base();
}
protected继承
私有成员在保护继承时,在类的内部可以对私有数据(公有方法可访问私有属性)和保护方法进行访问;在类的外部,子类不能对基类的所有方法访问。
#include<iostream>
using namespace std;
//1、在类的内部
//2、在类外部,即主函数中
class Base
{
public:
void Show_Base()
{ cout<<"Show() Base"<<endl;}
void setX(int data)
{ x=data; }
protected:
void Print_Base()
{ cout<<"Print() Base"<<endl;}
private:
int x;
};
class D:protected Base
{
private:
int y;
public:
void show_D()
{
cout<<"show() D"<<endl;
//可以访问保护
Print_Base();
}
void Print_D()
{ cout<<"Print() D"<<endl;}
};
void main()
{
Base b;
D d;
//d.x=10;
//d.show
d.setXX();
//保护方法不能被访问
//d.Show_Base();
//d.Print_Base();
}
总结:


1875

被折叠的 条评论
为什么被折叠?



