1.公有继承的访问
#include<iostream>
using namespace std;
class Base1
{
public:
int m_a;
protected:
int m_b;
private:
int m_c;
};
class Son:public Base1
{
public:
void func()
{
m_a=10;//父类中的公共权限成员 到子类中依然是公共权限
m_b=10; //父类中的保护权限成员 到子类中依然是保护权限
//m_c=10; //报错,因为父类中的私有权限成员 到子类中访问不到
}
};
void test01()
{
Son a;
a.m_a=100;//通过派生类的对象 可以访问基类中公有成员
//a.m_b=100;//报错,派生类的对象 不可以 访问基类中的保护成员 类外访问不到
//a.m_c=100;// 报错,派生类的对象 不可以 访问基类中的私有成员 类外访问不到
}
int main()
{
return 0;
}
2.保护继承
#include<iostream>
using namespace std;
class Base1
{
public:
int m_a;
protected:
int m_b;
private:
int m_c;
};
class Son:protected Base1
{
public:
void func()
{
m_a=10;//父类中的公共权限成员 到子类中是保护权限
m_b=10; //父类中的保护权限成员 到子类中是保护权限
//m_c=10; //报错,因为父类中的私有权限成员 到子类中访问不到
}
};
void test01()
{
Son a;
//a.m_a=100;//报错,因为a.m_a在派生类Son中是保护权限 通过派生类的对象 不可以访问
//a.m_b=100;//报错,因为a.m_b在派生类Son中是保护权限 派生类的对象 不可以 访问基类中的保护成员
//a.m_c=100;// 报错,派生类的对象 不可以 访问基类中的私有成员
}
int main()
{
return 0;
}
3.私有访问
#include<iostream>
using namespace std;
class Base1
{
public:
int m_a;
protected:
int m_b;
private:
int m_c;
};
class Son:private Base1
{
public:
void func()
{
m_a=10;//父类中的公共权限成员 到子类中是私有权限
m_b=10; //父类中的保护权限成员 到子类中是私有权限
//m_c=10; //报错,因为父类中的私有权限成员 到子类中访问不到
}
};
void test01()
{
Son a;
//a.m_a=100;//报错,因为a.m_a在派生类Son中变为私有成员被隐藏 通过派生类的对象 不可以访问
//a.m_b=100;//报错,因为a.m_b在派生类Son中变为私有成员被隐藏 派生类的对象 不可以 访问基类中的保护成员
//a.m_c=100;// 报错,派生类的对象 不可以 访问基类中的私有成员
}
int main()
{
return 0;
}
注意:
父类中所有非静态属性都会被子类继承下去(包括私有属性)
父类中的私有成员属性是被编译器给隐藏了,因此是访问不到的,但是确实被继承了。
#include<iostream>
using namespace std;
class Base1
{
public:
int m_a;
protected:
int m_b;
private:
int m_c;
};
class Son:private Base1
{
public:
int m_d;
};
void test01()
{
cout<<"Son:"<<sizeof(Son)<<endl;
}
int main()
{
test01();
return 0;
}