- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的任务中,我被要求创建 Product 类,我已经完成了除“非成员 IO 运算符”之外的所有实现。我发现这个问题非常模糊,它要求我重载 <<
Và >>
运算符与 ostream 和 istream 一起从控制台读取产品并将产品打印到控制台,以使此主要功能正常工作。
这里我看到主函数有 cout 或 cin 到 Product 的派生类 SItem,我想知道我应该如何实现 <<
>>
运算符(operator)完成主要工作。
我的主要内容:
#include
#include
#include
#include "Product.h"
#include
#ifdef TAB
# undef TAB
#kết thúc nếu
#define TAB '\t'
sử dụng không gian tên std;
namespace sict {
class SItem :public Product {
công cộng:
SItem(const char* theSku, const char * theName) :Product(theSku, theName) {}
SItem() {}
virtual std::fstream& store(std::fstream& file, bool addNewLine = true)const {
if (!isEmpty()) {
file.open("ms4.txt", ios::out | ios::app);
file << sku() << TAB << name() << TAB << quantity() << TAB << qtyNeeded() << TAB
<< int(taxed()) << TAB << price() << endl;
file.clear();
file.close();
}
return file;
}
virtual std::fstream& load(std::fstream& file) {
file.open("ms4.txt", ios::in);
char buf[2000];
double dbuf;
int ibuf;
file >> buf;
sku(buf);
file >> buf;
name(buf);
file >> ibuf;
quantity(ibuf);
file >> ibuf;
qtyNeeded(ibuf);
file >> ibuf;
taxed(ibuf != 0);
file >> dbuf;
price(dbuf);
file.clear();
file.close();
return file;
}
virtual std::ostream& write(std::ostream& os, bool linear)const {
return isEmpty() ? os : (os << sku() << ": " << name() << ", qty: "
<< quantity() << ", qtyNeeded:" << qtyNeeded()
<< ", Cost: " << fixed << setprecision(2) << cost());
}
virtual std::istream& read(std::istream& is) {
char buf[2000];
double dbuf;
int ibuf;
cout << "Sku: ";
is >> buf;
sku(buf);
cout << "Name (no spaces): ";
is >> buf;
name(buf);
cout << "Qty: ";
is >> ibuf;
quantity(ibuf);
cout << "Qty Needed: ";
is >> ibuf;
qtyNeeded(ibuf);
cout << "Is taxed? (1/0): ";
is >> ibuf;
taxed(ibuf != 0);
cout << "Price: ";
is >> dbuf;
price(dbuf);
return is;
}
};
}
void dumpFile(fstream& f) {
f.open("ms4.txt", ios::in);
char ch;
while (!f.get(ch).fail()) {
cout.put(ch);
}
f.clear();
f.close();
}
using namespace sict;
void test() {
double res, val = 0.0;
fstream F("ms4.txt", ios::out);
F.close();
SItem S;
SItem T;
SItem U;
cout << "Enter Product info: " << endl;
cin >> S;
SItem V = S;
S.store(F);
T.load(F);
cout << "T: (store, load)" << endl;
cout << T << endl;
cout << "S: " << endl;
cout << S << endl;
cout << "V(S): " << endl;
cout << V << endl;
cout << "U=T & op= :" << endl;
U = T;
cout << U << endl;
cout << "Operator == :" << endl;
cout << "op== is " << (T == "1234" ? "OK" : "NOT OK") << endl;
cout << "op+=: " << endl;
U += 10;
cout << U << endl;
cout << "op+=double : " << endl;
res = val += U;
cout << res << "=" << val << endl;
}
int chính() {
fstream F("ms4.txt", ios::out);
F.close();
SItem S;
SItem U("4321", "Rice");
cout << "Empty Prouduct:" << endl << S << endl;
cout << "U(\"4321\", \"Rice\"):" << endl << U << endl;
cout << "Please enter the following information:" << endl;
cout << "Sku: 1234" << endl;
cout << "Name(no spaces) : Blanket" << endl;
cout << "Qty : 12" << endl;
cout << "Qty Needed : 23" << endl;
cout << "Is taxed ? (1 / 0) : 1" << endl;
cout << "Price : 12.34" << endl;
test();
cout << "Please enter the following information:" << endl;
cout << "Sku: 1234" << endl;
cout << "Name(no spaces) : Jacket" << endl;
cout << "Qty : 12" << endl;
cout << "Qty Needed : 23" << endl;
cout << "Is taxed ? (1 / 0) : 0" << endl;
cout << "Price : 12.34" << endl;
test();
dumpFile(F);
cout << "----The End" << endl;
trả về 0;
}
这是我的 Product.h:
namespace sict {
class Product : public Streamable {
char sku_[MAX_SKU_LEN + 1];
char * name_;
double price_;
bool taxed_;
int quantity_;
int qtyNeeded_;
công cộng:
Product();
Product(const char*, const char*, bool = true, double = 0, int = 0);
Product(const Product&);
virtual ~Product();
Product& operator=(const Product&);
//setters
void sku(const char*);
void price(double);
void name(const char*);
void taxed(bool);
void quantity(int);
void qtyNeeded(int);
//getters
const char* sku()const;
double price()const;
const char* name()const ;
bool taxed()const;
int quantity()const;
int qtyNeeded()const;
double cost()const;
bool isEmpty()const;
//member operators
bool operator==(const char*);
int operator+=(int);
int operator-=(int);
};
double operator+=(double, const Product&);
std::ostream& operator<<(std::ostream& ostr, const Product& p);
std::istream& operator >> (std::istream& istr, Product& p);
}
除最后两个IO操作符外,所有功能均已实现。
Streamable 类是一个没有实现的抽象类。
1 Câu trả lời
你在很多方面都做错了。在您的情况下,最好的方法就是那样做。
首先为您的产品定义流操作的接口(interface):
class IStreamPrintable
{
công cộng:
virtual std::ostream& PrintToStream(std::ostream& outStream) const = 0;
};
class IStreamReadable
{
công cộng:
virtual std::istream& ReadFromStream(std::istream& inputStream) = 0;
};
其次定义将使用此接口(interface)的流操作符。
std::ostream& operator<<(std::ostream& out, const IStreamPrintable& printObject)
{
return printObject.PrintToStream(out);
}
std::istream& operator>>(std::istream& input, IStreamReadable& readObject)
{
return printObject.ReadFromStream(input);
}
现在你的Product
可以继承这个接口(interface):
class Product
: public IStreamPrintable
, public IStreamReadable
{
…
};
您不必立即实现。您可以在特定的产品类 SItem
中实现这些方法,它开箱即用。
你的方法 virtual std::fstream& store(std::fstream& file, bool addNewLine = true)
完全是一团糟。您正在传递 fstream
对象并在其上打开一些特定文件。这是错误的,因为您无法将多个对象写入单个文件。保留 ostream
对象并且不改变状态(只写),这样你就可以级联调用,这样你就可以避免对文件名进行硬编码。
关于c++ - 实现非成员 IO 操作符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45677051/
Làm thế nào để thiết bị IO biết giá trị trong bộ nhớ thuộc về nó đã thay đổi trong bộ nhớ được ánh xạ IO? ? Ví dụ, giả sử địa chỉ bộ nhớ 0 được dành riêng để lưu trữ màu nền cho thiết bị VGA. Khi chúng ta thay đổi giá trị trong bộ nhớ [0], VGA
Hiện tại tôi đang phát triển một ứng dụng iOS sử dụng SDK Facebook để đăng nhập (thông qua FBLoginView). Mọi thứ đều hoạt động tốt, ngoại trừ những người sử dụng phiên bản Facebook cũ. Khi họ nhấn nút "Đăng nhập bằng Facebook", anh ấy
Giả sử tôi có: đây - là một - ví dụ - với một số - dấu gạch ngang NSRange sẽ chọn trường hợp đầu tiên của "-" bằng cách sử dụng `rangeOfString:@"-", nhưng nếu tôi chỉ muốn trường hợp cuối cùng
SDK Card.io cung cấp các thông tin chi tiết sau: Số thẻ, Ngày hết hạn, Tháng, Năm, CVV và Mã bưu chính. Làm thế nào để lấy tên quốc gia từ SDK này. - (void)userDidProvideCreditCardInfo:(Xe hơi
Ứng dụng iOS tải xuống hình ảnh từ dịch vụ web và cài đặt chúng vào thiết bị iOS của người dùng trong quá trình cài đặt như thế nào? Có thể được không? Câu trả lời hay nhất Bạn không kiểm soát được việc cài đặt ứng dụng của mình trên thiết bị của người dùng, do đó bạn không thể tải xuống dữ liệu bổ sung trong quá trình cài đặt. Chỉ cần khởi động ứng dụng lần đầu tiên sau khi cài đặt
Tôi đã từng phát triển một sản phẩm iOS dành cho doanh nghiệp mà công ty tôi bán cho các doanh nghiệp lớn để nhân viên của họ sử dụng. Ứng dụng được cung cấp thông qua AppStore và người dùng doanh nghiệp được cung cấp hồ sơ cung cấp dành riêng cho công ty (có chứa hồ sơ cung cấp ứng dụng) để kích hoạt các ứng dụng mà họ được phép sử dụng.
Tôi đang cố gắng tích hợp Card.io SDK vào ứng dụng iOS của mình. Tôi muốn thực hiện một bản địa hóa đơn giản cho giao diện người dùng CardIO, như thay đổi tiêu đề nút hủy hoặc văn bản gợi ý "Đặt trước thẻ tín dụng của bạn tại đây". Tôi tìm thấy cái này trên github
Tôi đang sử dụng các lớp CardIOView và CardIOViewDelegate và không có BOOL nào có thể được đặt thành YES để quét collectCardholderName. Tôi có thể thấy nó trong CardIOP
Tôi có một ứng dụng VoIP được tích hợp bộ công cụ gọi điện. Mỗi lần tôi gọi từ ứng dụng VoIP, một bản ghi cuộc gọi gần đây mới sẽ được tạo trong ứng dụng điện thoại gốc. Tôi cũng có danh bạ tùy chỉnh trong ứng dụng voip của mình (ứng dụng điện thoại
Làm sao ứng dụng iOS biết được đã có bàn phím trên màn hình khi ứng dụng mở ra? Khi ứng dụng đang chạy, nó có thể nhận được thông báo hiện/ẩn bàn phím. Tuy nhiên, nếu ứng dụng được mở như một ứng dụng phụ ở chế độ chia đôi màn hình và ứng dụng chính đã hiển thị bàn phím, thì ứng dụng phụ không
Tôi nhận được lỗi sau trong trình mô phỏng: ImageIO: CGImageReadSessionGetCachedImageBlockData *** CGImageReadSessionGetCachedIm
Như được trình bày trong tài liệu của Apple, có thể giao tiếp với các phụ kiện được chứng nhận (do Apple chứng nhận) thông qua EAAccessory Framework. Nhưng tôi hơi bối rối vì một số bài đăng nói với tôi rằng nó cũng có thể được thực hiện thông qua CoreBluetoo
Mặc dù trình gỡ lỗi hiện nay khá tốt, nhưng đôi khi cách tốt nhất để tìm hiểu những gì đang diễn ra trong ứng dụng của bạn vẫn là sử dụng NSLog. Thật dễ dàng để thực hiện việc này khi bạn kết nối với máy tính; Xcode sẽ hữu ích khi hiển thị bảng xem nhật ký và bạn chỉ cần làm theo hướng dẫn. Khi bạn không làm việc
Trong ứng dụng iOS của mình, tôi đã xác định một số điểm quan tâm. Một số trong số chúng có tên Beacon Kontakt.io được liên kết với một PoI cụ thể (ý tôi là tên thường được gắn vào nhãn beacon). Bây giờ tôi muốn tìm đèn hiệu ở gần đó.
Tôi đang tạo một plugin trigger.io cho thông báo cảnh báo. Thử trả về dữ liệu từ lời nhắc cảnh báo. Đây là mã của tôi: // Prompt + (void)show_prompt:(ForgeTask*)task{
Xin chào, tôi mới sử dụng Apple iOS. Tôi đã đọc và tìm kiếm rất nhiều bài viết về thông báo đẩy nhưng không tìm thấy thông tin nào về bản cập nhật mới của APNS từ io4 lên ios 6. Có ai có thể cung cấp cho tôi cách sử dụng APNS trong ios không?
Chiều cao của UITabBar có vẻ đã thay đổi giữa iOS 7 và 8/9/10/11. Tôi đăng câu hỏi này để mọi người có thể dễ dàng tìm thấy câu trả lời. Trước đây: iOS 8/9/10/11 trên iPhone và iPad
Tôi đoán tôi có thể sử dụng nhiều Storyboard khác nhau cho các phiên bản iOS khác nhau. Do sự khác biệt trong UI, tôi sẽ tạo các Storyboard sau: Main_iPhone.storyboard Main_iPad.storyboard
Tôi đang viết một thứ mà tôi sẽ chồng một sự kết hợp của 2 video với một phần các bản âm thanh từ thư viện iTunes của thiết bị, như thế này: AVMutableComposition* mixComposition = [[AVMutableC
Tôi đã tạo một ứng dụng iOS đơn giản có thể biên dịch và chạy tốt trên trình mô phỏng iPad. Chương trình tương tự không biên dịch được khi tôi yêu cầu XCode 4 sử dụng thiết bị iPad đã kết nối của tôi. Vấn đề có vẻ như là khi tôi cố gắng sử dụng một chiếc iPad được kết nối
Tôi là một lập trình viên xuất sắc, rất giỏi!