1)C++中的继承方式会影响子类的对外访问属性
public继承:父类成员在子类中保持原有访问级别
private继承:父类成员在子类中变为private成员
protected继承:父类中public成员会变成protected
父类中protected成员仍然为protected
父类中private成员仍然为private
2)private成员在子类中依然存在,但是却无法访问到。不论种方式继承基类,派生类都不能直接使用基类的私有成员 。
C++中的继承方式(public、private、protected)会影响子类的对外访问属性
判断某一句话,能否被访问
1)看调用语句,这句话写在子类的内部、外部
2)看子类如何从父类继承(public、private、protected)
3)看父类中的访问级别(public、private、protected)
#include <iostream>
using namespace std;
//public 修饰的成员变量 方法 在类的内部 类的外部都能使用
//protected: 修饰的成员变量方法,在类的内部使用 ,在继承的子类中可用 ;其他 类的外部不能被使用
//private: 修饰的成员变量方法 只能在类的内部使用 不能在类的外部
//派生类访问控制的结论
//1 protected 关键字 修饰的成员变量 和成员函数 ,是为了在家族中使用 ,是为了继承
//2 项目开发中 一般情况下 是 public
class Parent
{
public:
int a; //老爹的名字
protected:
int b; //老爹的银行密码
private:
int c; //老的情人
};
//保护继承
class Child3 : protected Parent
{
public:
protected:
private:
public:
void useVar()
{
a = 0; // ok
b = 0; // ok //b这这里 写在了子类Child3的内部 子类看父类的protected====》protected
//c = 0; //err
}
};
int main()
{
Child3 c3;
//c3.a = 10; //err
//c3.b = 20; //err
//c3.c = 30;//err
return 0;
}
私有继承
//私有继承
class Child2 : private Parent
{
public:
void useVar()
{
a = 0; //ok
b = 0; //ok
//c = 0; // err
}
protected:
private:
};
int main()
{
Child2 c2;
//c1.a = 10; err
//c2.b = 20; err
//c3.b = 30;
return 0;
}
公有继承
class Child : public Parent
{
public:
void useVar()
{
a = 0; //ok
b = 0; //ok
//c = 0; // err
}
protected:
private:
};
/*
C++中的继承方式(public、private、protected)会影响子类的对外访问属性
判断某一句话,能否被访问
1)看调用语句,这句话写在子类的内部、外部
2)看子类如何从父类继承(public、private、protected)
3)看父类中的访问级别(public、private、protected)
*/
//公有继承
int main()
{
Parent t1, t2;
t1.a = 10; //ok
//t1.b = 20; //err
//t2.c = 30 ; //err
cout<<"hello..."<<endl;
return 0;
}
本类 | 派生类 | 其他 | |
public | YES | YES | YES |
protected | YES | YES | NO |
private | YES | NO | NO |
//类的继承方式对子类对外访问属性影响
#include <cstdlib>
#include <iostream>
using namespace std;
class A
{
private:
int a;
protected:
int b;
public:
int c;
A()
{
a = 0; b = 0; c = 0;
}
void set(int a, int b, int c)
{
this->a = a; this->b = b; this->c = c;
}
};
class B : public A
{
public:
void print()
{
//cout<<"a = "<<a; //err
cout<<"b = "<<b; //ok
cout<<"c = "<<endl; //ok
}
};
class C : protected A
{
public:
void print()
{
//cout<<"a = "<<a; //err
cout<<"b = "<<b; // ok
cout<<"c = "<<endl; //ok
}
};
class D : private A
{
public:
void print()
{
//cout<<"a = "<<a; //err
cout<<"b = "<<b<<endl; //ok
cout<<"c = "<<c<<endl; // ok
}
};
int main()
{
A aa;
B bb;
C cc;
D dd;
aa.c = 100; //ok
bb.c = 100; // ok
//cc.c = 100; // err 保护的
//dd.c = 100; // err
aa.set(1, 2, 3); //ok
bb.set(10, 20, 30); //ok
//cc.set(40, 50, 60); // err
//dd.set(70, 80, 90); //err
bb.print(); //ok
cc.print(); //ok
dd.print(); //
/**/
system("pause");
return 0;
}