1.恢复继承成员的访问级别(using 声明)
*派生类可以恢复继承成员的访问级别,但是不能使访问级别比基类中原来指定的更严格或更宽松
Example:
class base
{
public:
int x;
};
class private_derived:private base
{
public:
using base::x;
};
int main()
{
private_derived pd;
pd.x=1;// 如果去除using base::x,则出错: 'int base::x' is inaccessible
cout<<pd.x<<endl;//1
}
2.默认继承保护级别
*class保留字定义的派生类默认具有private继承
*struct保留字定义的派生类默认具有public继承
Example:
class base
{
};
class private_derived: base
{
};
等效于
class private_derived: private base
{
};
3.友元关系与继承
*友元关系不能继承,基类的友元对派生类的成员没有特殊访问权限
Example:
class base
{
friend class frd;
public:
base(int i):x(i)
{
}
private:
int x;
};
class derived: public base
{
public:
derived(int j):base(j)
{
}
private:
int y;
};
class frd
{
public:
void fun1(base b)
{
cout<<"base:: "<<b.x<<endl;
}
void fun2(derived d)
{
//cout<<"derived:: "<<d.y<<endl;//error, 'int derived::y' is private
}
};
int main()
{
base b(1);
derived d(2);
frd f;
f.fun1(b);//base:: 1
return 0;
}
4.继承与静态成员
*如果基类定义了static成员,则整个继承层次中只有一个这样的成员
*static成员遵循常规访问控制
Example:
class base
{
public:
static void fun()
{
cout<<"static base::fun()"<<endl;
}
};
class derived: public base
{
};
int main()
{
derived d;
derived *pd=new derived;
derived::fun();//static base::fun()
d.fun();//static base::fun()
pd->fun();//static base::fun()
return 0;
}
*派生类可以恢复继承成员的访问级别,但是不能使访问级别比基类中原来指定的更严格或更宽松
Example:
class base
{
public:
int x;
};
class private_derived:private base
{
public:
using base::x;
};
int main()
{
private_derived pd;
pd.x=1;// 如果去除using base::x,则出错: 'int base::x' is inaccessible
cout<<pd.x<<endl;//1
}
2.默认继承保护级别
*class保留字定义的派生类默认具有private继承
*struct保留字定义的派生类默认具有public继承
Example:
class base
{
};
class private_derived: base
{
};
等效于
class private_derived: private base
{
};
3.友元关系与继承
*友元关系不能继承,基类的友元对派生类的成员没有特殊访问权限
Example:
class base
{
friend class frd;
public:
base(int i):x(i)
{
}
private:
int x;
};
class derived: public base
{
public:
derived(int j):base(j)
{
}
private:
int y;
};
class frd
{
public:
void fun1(base b)
{
cout<<"base:: "<<b.x<<endl;
}
void fun2(derived d)
{
//cout<<"derived:: "<<d.y<<endl;//error, 'int derived::y' is private
}
};
int main()
{
base b(1);
derived d(2);
frd f;
f.fun1(b);//base:: 1
return 0;
}
4.继承与静态成员
*如果基类定义了static成员,则整个继承层次中只有一个这样的成员
*static成员遵循常规访问控制
Example:
class base
{
public:
static void fun()
{
cout<<"static base::fun()"<<endl;
}
};
class derived: public base
{
};
int main()
{
derived d;
derived *pd=new derived;
derived::fun();//static base::fun()
d.fun();//static base::fun()
pd->fun();//static base::fun()
return 0;
}