Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
参数传递标准化 我的C++项目正在变得庞大。在某些情况下,我通过引用传递参数只是为了我自己的方便,而在某些情况下我不这样做。下面是一个例子: struct foo{ foo(int &member){ this->member = &member; } private: int *member; };_C++_Design Patterns_Parameter Passing - Fatal编程技术网

参数传递标准化 我的C++项目正在变得庞大。在某些情况下,我通过引用传递参数只是为了我自己的方便,而在某些情况下我不这样做。下面是一个例子: struct foo{ foo(int &member){ this->member = &member; } private: int *member; };

参数传递标准化 我的C++项目正在变得庞大。在某些情况下,我通过引用传递参数只是为了我自己的方便,而在某些情况下我不这样做。下面是一个例子: struct foo{ foo(int &member){ this->member = &member; } private: int *member; };,c++,design-patterns,parameter-passing,C++,Design Patterns,Parameter Passing,当我不想创建int变量的两个实例时,我使用这个模式。我不必实现get或modify方法来操纵其值。相反,我甚至可以在不访问foo对象的情况下更改变量。但是,有时我使用不同的方式管理成员变量: struct foo{ foo(int member){ this->member = member; } void modify_member(){ this->member = 6; } int get_member()

当我不想创建
int
变量的两个实例时,我使用这个模式。我不必实现
get
modify
方法来操纵其值。相反,我甚至可以在不访问foo对象的情况下更改变量。但是,有时我使用不同的方式管理成员变量:

struct foo{
    foo(int member){
        this->member = member;
    }
    void modify_member(){
        this->member = 6;
    }
    int get_member(){
        return this->member;
    }
    private:
        int member;
};

我不确定在同一个结构中混合使用这两种管理成员的方法是否是一种好的做法。我应该让它正常化吗?例如,给定结构中的每个函数都将使用“按值传递”方法

你的第一个病例会导致灾难。你最终会得到悬空的指针和一车未定义的行为


您的第二个案例在封装方面做得很差。没有必要。只需使用
int
。这将减少代码库的大小。

您的第一个案例将导致灾难。你最终会得到悬空的指针和一车未定义的行为


您的第二个案例在封装方面做得很差。没有必要。只需使用
int
。这将减少代码库的大小。

代码应该易于阅读和更改,这是一种不会破坏程序的方式。示例一将导致代码,您很难知道
foo
实例在哪里被修改。不要忘记已经提到的所有其他问题

例二可以。通常,通过提供getter和setter,可以在以后添加约束,例如检查值范围。所以我建议使用它们,除非你有充分的理由不这样做。它还使重构变得更容易

在函数中传递参数时:根据经验,在原语类型为int、double等的情况下使用pass by value。。传递对象时使用常量引用
foo(constmyclass&MyClass)


代码应该易于阅读和更改,这是一种不会破坏程序的方式。示例一将导致代码,您很难知道
foo
实例在哪里被修改。不要忘记已经提到的所有其他问题

例二可以。通常,通过提供getter和setter,可以在以后添加约束,例如检查值范围。所以我建议使用它们,除非你有充分的理由不这样做。它还使重构变得更容易

在函数中传递参数时:根据经验,在原语类型为int、double等的情况下使用pass by value。。传递对象时使用常量引用
foo(constmyclass&MyClass)


如果你问我,你应该完全抛弃第一种方法,因为它看起来很混乱,并且会破坏数据封装。除此之外,这个问题主要是基于观点的。@ChristianHackl我只是想知道在这种情况下,是否有某种规则可以遵循。例如,每个人都应该格式化他们的代码,这样它更具可读性。在某些情况下,每个人都应该使用单例模式。你知道-有一些规则规定我们应该如何编程。“每个人都应该在某些情况下使用单例模式。”-我不同意。在我多年的实践经验中,我发现这是一个有严重缺陷的反模式。@ChristianHackl哦,我不知道。正如你可以猜到的,我不是一个有经验的程序员,我很久以前就读过这个模式。我提到它只是为了提供一个“代码设计”规则的例子。@user3125731:(斯科特·迈尔斯的书+萨特和亚历山德雷斯库的“编码标准”可能正是你想要的)。如果你问我,你应该完全抛弃第一种方法,因为它看起来很混乱,并且会影响数据封装。除此之外,这个问题主要是基于观点的。@ChristianHackl我只是想知道在这种情况下,是否有某种规则可以遵循。例如,每个人都应该格式化他们的代码,这样它更具可读性。在某些情况下,每个人都应该使用单例模式。你知道-有一些规则规定我们应该如何编程。“每个人都应该在某些情况下使用单例模式。”-我不同意。在我多年的实践经验中,我发现这是一个有严重缺陷的反模式。@ChristianHackl哦,我不知道。正如你可以猜到的,我不是一个有经验的程序员,我很久以前就读过这个模式。我提到它只是为了提供一个“代码设计”规则的例子。@user3125731:(斯科特·梅耶斯的书+萨特和亚历山德雷斯库的“编码标准”可能正是你要找的)。
class MyClass {
    public:
    MyClass(const MyOtherClass &member1, int member2){
         this->member1 = member1;
         this->member1 = member1;
    }

    // other functions, getters, setters omitted...

    private:
    MyOtherClass member1;
    int member2;
};