本文学习自 狄泰软件学院 唐佐林老师的 C++课程
实验1:继承中的访问级别
实验2:protected 初体验,protected 修饰的成员不能被外界直接访问,可以被子类直接访问。
实验1:继承中的访问级别
#include <iostream>
#include <string>
using namespace std;
class Parent
{
private:
int mv;
public:
Parent()
{
mv = 100;
}
int value()
{
return mv;
}
};
class Child : public Parent
{
public:
int addValue(int v)
{
mv = mv + v; // ???? 如何访问父类的非共有成员
}
};
int main()
{
return 0;
}
mhr@ubuntu:~/work/c++$ g++ 44-1.cpp
44-1.cpp: In member function ‘int Child::addValue(int)’:
44-1.cpp:9:9: error: ‘int Parent::mv’ is private
int mv;
^
44-1.cpp:27:9: error: within this context
mv = mv + v; // ???? 如何访问父类的非共有成员
^
44-1.cpp:9:9: error: ‘int Parent::mv’ is private
int mv;
^
44-1.cpp:27:14: error: within this context
mv = mv + v; // ????如何访问父类的非共有成员
^
mhr@ubuntu:~/work/c++$
实验2:protected 初体验,protected 修饰的成员不能被外界直接访问,可以被子类直接访问。
#include <iostream>
#include <string>
using namespace std;
class Parent
{
protected:
int mv;
public:
Parent()
{
mv = 100;
}
int value()
{
return mv;
}
};
class Child : public Parent
{
public:
int addValue(int v)
{
mv = mv + v;
}
};
int main()
{
Parent p;
cout << "p.mv = " << p.value() << endl; //父类内部访问
// p.mv = 1000; // error 类外部不能直接访问
Child c;
cout << "c.mv = " << c.value() << endl;
c.addValue(50); //子类内部访问
cout << "c.mv = " << c.value() << endl;
// c.mv = 10000; // error 类外部不能直接访问
return 0;
}
protected 介于 public 和 private之间
如果一定要访问父类的private成员,那么只能通过父类的 getA() getB()等公有函数来间接访问。