繁体   English   中英

课堂上的吸气剂和二传手

[英]getters and setters in class

我正在尝试编写一个程序,考虑到我有一大堆对象(包括一些数据,如id,name等)我有一个显示菜单,如:

1)

display_menu()
{
    vector< CD > CDArray;
    //some statements to display
    switch(choice)
    {
        //case1 , case 2, ...
        case x;
            for(int i=0; i < CDArray.size(); i++)
                CDArray[i].printCD(); //printCD() is a method of class CD
        //default
    }
}

但是如果向量/数组很大,这将导致很多函数调用开销,使其变慢。

2)我应该将函数printCD()声明为内联或

3)声明另一个对象来调用该函数并通过引用传递vector / array,如:

display_menu()
{
    vector< CD > CDArray; 
    CD obj; 
    //some statements to display
    switch(choice)
    {
        //case1 , case 2, ...
        case x;
            obj.printCD(CDArray); //CDArray is passed by reference
        //default
    }
}

第三种方法有问题吗?

你会建议什么方法?

你正在分析这个问题。 首先让它可读,然后担心性能。 你认为最好的性能瓶颈来源是100次中的99次是错误的。

编辑

要真正回答这个问题,我会考虑面向对象的设计。 您的CD对象是否需要知道如何将自己打印到屏幕上? 是否需要了解有关ostreams的任何信息? 我认为答案是肯定的。 在C ++中执行此类操作的最佳方法是要么具有辅助函数,该函数会重载<<运算符,以便它可以与ostream一起使用,而不会强制了解对象正在使用哪个流,或者有一个返回的方法对象的字符串表示形式,这样您甚至不必担心字符串的去向。

第三种方法很好,它是全球性的,以数据为导向的方式,并且似乎是合适的。

但是:

这里你的函数不需要是成员函数,它适用于一组CD对象而没有状态。 所以你应该把它变成静态函数或全局函数。

我会设置命名空间和全局函数:

cdutil::print( CDArray ); 

但这在很大程度上取决于函数的语义。 在这里,我完全不确定它的含义。

我会选择CD(或模板友元函数)中的(静态)方法,该方法知道如何打印由两个迭代器beginend引用的CD集合。 但是,这样做只是一个好主意,如果你真的需要加速这里。

您可以“转变思路”并为CD类创建一个accept_visitor方法,并创建一个访问者对象以传递给每个CD对象。 这将在您的项目中为您提供更大的灵活性。 有关更多信息,请联系Web并搜索“访客设计模式”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM