2016-07-18 6 views
-1

特定のconst値を特定の条件に割り当てることを試みています。例えばネストされたif elseステートメントを使用して特定の条件にconst値を割り当てます

半ばコストがmidDiscountを受けるべきと最低のコストがlowDiscountを受ける必要がありながらhighDiscountを受けなければならない、私は最高のコストで3 constの値

const double highDiscount = 0.3; 
const double midDiscount = 0.2; 
const double lowDiscount = 0.1; 

製品をしました。

したがって、if-elseステートメントを使用して特定の条件でconstを割り当てようとしました。

私の出力コード

acostが30%割引

ccostが20%割引

を有した以下の結果を生成しなければならない

cout << "acost has a" discount*100 << "% discount" << endl; 
cout << "bcost has a" discount*100 << "% discount" << endl; 
cout << "ccost has a" discount*100 << "% discount" << endl; 

を使用

double discount; 

if (acost > bcost && acost > ccost) 
{ 

    discount = highDiscount; 

    if (bcost < ccost) 
    { 
     discount = midDiscount; 

    } 
    else if (ccost < bcost) 
    { 
     discount = lowDiscount; 
    } 
} 

bcostには10%の割引があります

残念ながら、コードをコンパイルすると、割り当てられたconst値の代わりにすべてのa、b、およびcが10%割引になります。

ここで重要な点はいくつかありますか?製品クラスで

+2

してください** [編集] ** [MCVE]または[SSCCEとあなたの質問(ショート、自己完結型、正しい例)](http://sscce.org) – NathanOliver

+0

'adiscount'はありますか?あなたはどのようにコードを呼び出しますか? – Jarod42

+0

@ Jarod42私は自分の投稿を編集しました。はい、私は倍率として私の割引を宣言します。 –

答えて

1

、<オペレータ

bool operator< (const product &other) const { 
    return cost < other.cost; 
} 

を追加し、すべての製品を保持するベクトルを作成します。

(コストでソートされます)ソート製品のベクトル

std::sort(products.begin(), products.end()); 

vector<product> products; 
products.push_back(product1); 
products.push_back(product2); 
products.push_back(product3); 

そして、ちょうどこれは、同じくらい読みやすく、デバッグで

products[0].discount = lowDiscount; 
products[1].discount = midDiscount; 
products[2].discount = highDiscount; 

ソートされた要素にあなたの割引を適用しますそれらのネストされたif文。

あなたのコードには何が間違っているのか完全にはっきりしているわけではありません。

編集:あなたのコードのロジックと根本的に間違っているものがあるので は、ここに完全に含まれるサンプルです:

#include <string> 
#include <vector> 
#include <algorithm> 
#include <iostream> 


class product { 
public: 
    product(std::string name, double cost); 
    ~product(); 
    //in product class, add the < operator 
    bool product::operator< (const product &other) const; 
    std::string Name; 
    double Cost; 
    double Discount; 
}; 

product::product(std::string name, double cost) : Name(name), Cost(cost){} 
product::~product(){} 


const double highDiscount = 0.3; 
const double midDiscount = 0.2; 
const double lowDiscount = 0.1; 

struct CompareProductPointers { 
    bool operator()(const product* l, const product* r) { 
     return *l < *r; 
    } 
}; 

int main() { 
    //create a vector holding all your products 
    product product1("product1", 10); 
    product product2("product2", 8); 
    product product3("product3", 12); 

    std::vector<product*> products; 
    products.push_back(&product1); 
    products.push_back(&product2); 
    products.push_back(&product3); 

    //sort your product vector (which will sort by cost) 
    std::sort(products.begin(), products.end(), CompareProductPointers()); 

    //apply your discount to the sorted elements 
    products[0]->Discount = lowDiscount; 
    products[1]->Discount = midDiscount; 
    products[2]->Discount = highDiscount; 

    //output 
    std::cout << product1.Name << " has a " << (product1.Discount * 100) << "% discount" << std::endl; 
    std::cout << product2.Name << " has a" << (product2.Discount * 100) << "% discount" << std::endl; 
    std::cout << product3.Name << " has a" << (product3.Discount * 100) << "% discount" << std::endl; 
    return 0; 
} 
+0

OPが製品クラスをまったく使用していないかどうかは不明ですし、単一のconst変数がどういうわけかそれぞれの製品に異なる方法で適用できるとの期待から、私は彼らがまだその段階。 –

関連する問題