钱能的C++中......求大家解惑,有分得.
钱能的C++第二版中 第十章有这样一个例子:
#include <iostream>
using namespace std;
class Base{
int a;
void f(){cout < <a;}
public:
int b;
void g(){cout < <a;}
protected:
int c;
void k(){cout < <a;}
};
class Derived:public Base{
public:
void df(){
cout < <a; //错
cout < <b; //ok
cout < <c; //ok
f(); //错
g(); //ok
k(); //ok
}
};
void func(){
Base b;
cout < <b.a; //错
cout < <b.b; //错
cout < <b.c; //ok
b.f(); //错
b.g(); //错
b.k(); //ok
}
这个例子主要想说明子类成员函数对父类的访问能力和外部函数创建子类对象所具有的访问能力,但是其中func函数中所建的父类对象b,为什么访问输出父类的public数据成员int b和成员函数g()就是错的呢?public访问控制符不是对所有使用类和子类都是公开的吗?为什么输出会出错呢?为什么构建子类时访问就不会出错呢?望各位高手给予点拨,不胜感谢.
[解决办法]
// 应该是这样的:
#include <iostream>
using namespace std;
class Base{
int a;
void f(){cout < <a;}
public:
int b;
void g(){cout < <a;}
protected:
int c;
void k(){cout < <a;}
};
class Derived:public Base{
public:
void df(){
cout < <a; //错
cout < <b; //ok
cout < <c; //ok
f(); //错
g(); //ok
k(); //ok
}
};
void func(){
Base b;
cout < <b.a; //错
cout < <b.b; //ok
cout < <b.c; //错
b.f(); //错
b.g(); //ok
b.k(); //错
}