我们总是声明一个纯虚函数:
virtual void fun () = 0 ;
Run Code Online (Sandbox Code Playgroud)
即,它总是被赋值为0.
我的理解是,这是将此函数的vtable条目初始化为NULL,此处的任何其他值都会导致编译时错误.这种理解是否正确?
我有以下代码:
#include <iostream>
using namespace std;
class Base
{
private:
int i;
char ch;
public:
void showdata()
{
cout<<"Int:"<<i<<endl;
cout<<"Char:"<<ch<<endl;
}
//int pub_data ;
} ;
int main()
{
Base ob;
ob.showdata() ;
//cout<<"Public Data:"<<ob.pub_data<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该程序编译并运行正常.输出显示i初始化为0,ch初始化为'\ 0'.
如果你注意到我在这个程序中注释了2个语句.首先声明公共数据pub_data和第二行内部主要打印这个公共数据.
现在问题是,如果我取消注释这两行,类似i,ch,pub_data的数据成员似乎没有被初始化,并且在打印时,它们显示垃圾值.
所以我的问题是公共数据与此有何不同?
我正在使用g ++ 3.4.6
几天前我被问到了这个问题.要求是设计一个向用户提供体育内容的移动应用程序(比如足球).该应用程序将允许用户订阅特定团队.根据用户的团队选择,应用程序仅在用户主屏幕上提供与该团队相关的内容.当然,用户可以选择查看所有团队的内容(通过菜单选项).
特别关注的是如何自动刷新用户主屏幕上的内容,还应考虑用户是否(或尚未)订阅特定团队.
对于最后一个问题,我建议遵循2个解决方案:
1)应用程序可以向服务器发送微小的请求,该请求仅包含用户的标识符,用户的团队选择.根据输入请求中的团队选择,服务器将仅返回与团队相关的内容.
2)如果内容量较少且不同团队的数量很少,则广播所有信息并让应用程序进行必要的过滤(当然,与#1相比,效率较低).
在论坛上分享这个以获得其他可能的设计决策.如果这不是正确的论坛,请在评论中回答,我将在适当的论坛发帖.
谢谢
在另一个社区,我有人建议你应该"永远"在你的基类中拥有属性.相反,它应该只有纯虚函数,让派生类负责为所有这些方法提供定义.
我的看法是"这不是一个经验法则".我给出了以下简单的例子:
class Shape
{
protected:
double Area;
double Perimeter ;
public:
Shape():Area(0.0), Perimeter(0.0){}
double getArea(){return Area;}
double getPerimeter (){return Perimeter;}
virtual void setArea () = 0 ;
virtual void setPerimeter () = 0 ;
};
class Rectangle : public Shape
{
private :
double length ;
double breadth ;
public:
Rectangle ():length(0.0),breadth(0.0){}
Rectangle (int _length, int _breadth):length(_length),breadth(_breadth){}
void setArea ()
{
Area = length * breadth ;
}
void setPerimeter ()
{
Perimeter = 2 * (length + breadth) …Run Code Online (Sandbox Code Playgroud)