C++语法基础--恢复继承成员的访问级别,默认继承保护级别,友元关系与继承,继承与静态成员
2013-07-20 19:43
876 查看
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;
}
相关文章推荐
- C++中的继承关系、访问限定符,六个默认成员函数以及菱形继承和虚继承
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- 二十五、继承(二) 不能自动继承的成员函数、继承与构造函数、友元关系与继承、静态成员与继承
- C++基类和派生类私有、保护、公有成员访问控制以及动态绑定、三种继承
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- C++基础(八)继承与派生——派生类成员的访问属性
- 【C++基础】浅谈内联、静态成员和友元
- 第05章 CORE C++_对象的创建和使用_继承_多态_析构_xxx_cast_友元_只读成员_静态成员_多重继承_虚继承_内部类
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- 友元函数、友元类、访问私有数据成员、友元关系[C++]
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- C++语法基础--顺序容器(三)--关系操作符,容器大小的操作,访问元素,删除元素,查找元素
- 嵌入式开发之C++基础学习笔记5--静态成员,友元,运算符重载,模板,文件流
- c++与Java中继承关系对成员访问权限的影响之比较
- C++转换与继承;友元friend与继承;静态成员与继承(六)
- C#基础知识复习1代码规范-执行流程(c#)-面向对象-引用命名空间-封装-继承-访问修饰符-虚方法-静态成员-多态-抽象类等
- 派生类可以恢复继承成员的访问级别, 但不能使访问级别比基类中原来指定的更严格或更宽松 [C++Primer Page484 : 2去除个别成员]
- C++ 保护,私有继承,公有继承 ---访问属性--关系
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- [c++基础]运算符重载,共有数据保护,静态成员