class D2 : public B1<D2>
{
public:
void PrintClassName() { cout << "This is D2"; }
};改成 public 就OK
{
public:
void PrintClassName() { cout << "This is D2"; }
};改成 public 就OK
解决方案 »
- 关于DISPID_NAVIGATECOMPLETE2 and DISPID_NAVIGATECOMPLETE
- 如何理解这个变量
- 100分提问 vc6.0 当我关闭子对话框的时候 主对话框也关闭了,搞了几天不知道问题出在哪里? 请高手帮帮忙. 急死我了.
- 两个工程间的跳转
- 怎样给一个对话框增加一个工具条??
- vc编辑窗口中出现大量的TAB 和空格键的怪字符,密密麻麻看者很难受,请帮助怎么处理啊?
- 关于对话框的网页处理
- 为什么有的工程没有MainFrm.h 和 MainFrm.cpp文件?
- 初学数据库,请问m_pSet->Edit()+m_pSet->Update(),可修改并保存修改(至少Access中是如此),那要TransCommit()干吗?
- com组件的连接点中的事件函数怎么不工作
- 如何让工作线程一直运行,不退出.
- 100分求助,请问我该怎么打开刚复制过来的文件?
class base
{
public:
void call()
{
vfunc();
}
protected:
virtual void vfunc()
{
cout << "Call base::vfunc() "<< endl;
}
};class derive: public base
{
protected:
virtual void vfunc()
{
cout << "Call derive::vfunc() " << endl;
}
};int main()
{
base* p = new derive;
p->call();
return 0;
}
不也能通过,加了模板为什么会原先的语法也改了
pT->PrintClassName();
等于在类外部调用 PrintClassName();
这个 pT->PrintClassName(); 中的 PrintClassName() 不是类体系中的 PrintClassName()
{
friend class B1<D2>; // 加上这一句
protected:
void PrintClassName() { cout << "This is D2"; }
};因为B1要调用D2的PrintClassName函数,函数是protected,只有D2的派生类或友元才能访问。
一种是虚函数,这种方式是覆盖.
另一种方式没有使用虚函数,这种方式是隐藏.
而protected是对起子类是可见,但子类的protected对父类来说是不可见的.
这句话很关键,你的基类的函数被覆盖,而基类的成员要用到子类成员函数,protected对他并不可见.