实现has-a关系有两种方法:
方法1:包含--一个类包含另一个类的对象,注意的地方是编写构造函数时,使用成员初始化列表[对象名()],初始化类成员对象
方法2:私有继承--一个类私有继承另一个类,注意的地方是编写构造函数时,使用成员初始化列表[类名()],初始化类成员对象
问题1:私有继承类如何访问基类的方法?
class Student:private string,private valarray<double>
double Average()const
{ .......
return valarray<double>::sum()/valarray<double>::size(); //使用类名和作用域解析操作符
.......
}
问题2:私有继承类如何访问基类对象?
class Student:private string,private valarray<double>
const string &Name()const
{
return (const string &) (*this); //使用强制类型转换,为避免调用构造函数创建新的对象,
} //可以使用强制类型转换,创建一个引用
问题3:私有继承如何访问基类的友元函数?
class Student:private string,private valarray<double>
用类名限制函数名不行,因为友元函数不属于类,可以通过显示的强制类型转换为基类,达到目的
ostream & operator<<(ostream &os,const Student &stu)
{
os<<(const string &)stu; //将私有派生类stu强制转换为基类string,然后调用string类的方法
}