查阅资料,结合程序实例,分析总结若基类中的数据成员 的访问权限为private,对于类的继承实现有无影响
若基类中的数据成员的访问权限为private,子类将无法直接访问基类的数据成员,但可以通过基类的公共成员函数或受保护成员函数来访问。因此,基类中数据成员的访问权限对于类的继承实现有一定影响,但并不会阻止子类继承基类的成员函数和方法。在实际程序开发中,通常会将基类中的数据成员设置为private,以保护数据的安全性和完整性。
routine
#include <iostream>
class Apple
{
friend class Banana;
public:
Apple(double input) //constructer
{
m_a = input;
std::cout<<m_a<<std::endl;
}
private:
double m_a;
};
class Banana
{
public:
double test(Apple apl)
{
double b = 1 + apl.m_a;
std::cout<< "b = " << b <<std::endl;
return b;
}
};
int main()
{
Apple littleApple(1.0);
Banana littleBanana;
littleBanana.test(littleApple);
std::cin.get();
}
在类的继承实现中,基类数据成员的访问权限为private会对子类产生影响。子类无法直接访问基类的私有成员变量,但可以通过基类的公有成员函数或者友元函数进行访问。
以下是代码实例:
#include<iostream>
using namespace std;
class Base {
private:
int num; //私有成员变量
public:
Base(int n) : num(n) {} //构造函数
void display() {
cout << "Base num: " << num << endl;
} //公有成员函数
friend class Derived; //友元类
};
class Derived : public Base {
public:
void show() {
cout << "Derived num: " << num << endl; //错误,不能直接访问私有成员变量
display(); //可以调用公有成员函数
}
};
int main() {
Base b(10);
b.display();
Derived d;
d.show();
return 0;
}
在以上代码中,基类Base的num成员变量被修饰为private,子类Derived继承了Base,但无法直接访问Base中的num。在Derived的show函数中,使用num直接访问会编译错误,但可以调用Base的公有成员函数display。同时,在Base中声明了Derived为友元类,可以访问Base的私有成员变量。可以在Base中加入以下代码:
friend class Derived; //友元类
这样,Derived就能访问Base中的私有成员变量了。
总结:基类数据成员的访问权限为private,在类的继承实现中会对子类产生影响,子类无法直接访问基类私有成员变量,但可以通过调用基类的公有成员函数或者通过友元类的方式进行访问。