小编muk*_*mar的帖子

为什么纯虚函数初始化为0?

我们总是声明一个纯虚函数:

virtual void fun () = 0 ;
Run Code Online (Sandbox Code Playgroud)

即,它总是被赋值为0.

我的理解是,这是将此函数的vtable条目初始化为NULL,此处的任何其他值都会导致编译时错误.这种理解是否正确?

c++ abstract-class pure-virtual

145
推荐指数
7
解决办法
5万
查看次数

类数据默认初始化

我有以下代码:

#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

c++ initialization

5
推荐指数
2
解决办法
1万
查看次数

高效的自动刷新移动应用程序设计

几天前我被问到了这个问题.要求是设计一个向用户提供体育内容的移动应用程序(比如足球).该应用程序将允许用户订阅特定团队.根据用户的团队选择,应用程序仅在用户主屏幕上提供与该团队相关的内容.当然,用户可以选择查看所有团队的内容(通过菜单选项).

特别关注的是如何自动刷新用户主屏幕上的内容,还应考虑用户是否(或尚未)订阅特定团队.

对于最后一个问题,我建议遵循2个解决方案:

1)应用程序可以向服务器发送微小的请求,该请求仅包含用户的标识符,用户的团队选择.根据输入请求中的团队选择,服务器将仅返回与团队相关的内容.

2)如果内容量较少且不同团队的数量很少,则广播所有信息并让应用程序进行必要的过滤(当然,与#1相比,效率较低).

在论坛上分享这个以获得其他可能的设计决策.如果这不是正确的论坛,请在评论中回答,我将在适当的论坛发帖.

谢谢

software-design

5
推荐指数
2
解决办法
652
查看次数

基类应该有属性吗?

在另一个社区,我有人建议你应该"永远"在你的基类中拥有属性.相反,它应该只有纯虚函数,让派生类负责为所有这些方法提供定义.

我的看法是"这不是一个经验法则".我给出了以下简单的例子:

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)

c++ oop

2
推荐指数
3
解决办法
2174
查看次数