不要习惯用using namespace std

本文讨论了C++编程中使用using namespace std的习惯可能导致的问题,特别是关于类成员访问权限方面的影响。
部署运行你感兴趣的模型镜像

如果你要问我在C++中发现的最不好的习惯是什么?

我得告诉你:那就是习惯使用using namespace std;

有时候你会发现using namespace std可以让你节约很多时间去避免std::cout;std::cin;std::endl,std::string等等,

曾经有段时间庆幸发现了这个秘诀,但现在才发现这个秘诀是多么的致命.

前几天遍了个最简单的程序,构造一个Read_Info类,进行>>和<<运算符重载.

当我在写程序习惯如下:

#include<iostream>

using namespace std;

class Read_Info{

.......

};

此时在Read_Info.cpp调用Read_Info.h时,发现系统提示无法访问private成员.

我就奇怪了?怎么自己都访问不了自己的成员.

后来才发现最害人的工具就是using namespace std;

当然我现在还没有把思路整理清楚:就是为什么会影响到成员的访问?

但是我必须告戒大家,忘记这个习惯,放弃这个习惯.

 

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.9

TensorFlow-v2.9

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

### 回答问题 #### 1. 设计类继承结构并编写基类构造函数(不使用 `using namespace std;`) 为了将 `book` 和 `magazine` 类放入一个共同的继承层次结构中,我们可以定义一个基类 `Publication`,它包含两个类共有的属性(如 `title`、`publisher` 和 `price`)。然后让 `book` 和 `magazine` 继承自这个基类,并在派生类中添加各自特有的属性。 以下是代码实现: ```cpp #include <iostream> #include <string> // 基类:Publication class Publication { protected: std::string title; std::string publisher; double price; public: // 构造函数 Publication(std::string t = "", std::string p = "", double pr = 0.0) : title(t), publisher(p), price(pr) {} // 获取和设置方法 void setTitle(const std::string& t) { title = t; } std::string getTitle() const { return title; } void setPublisher(const std::string& p) { publisher = p; } std::string getPublisher() const { return publisher; } void setPrice(double pr) { price = pr; } double getPrice() const { return price; } }; // 派生类:Book class Book : public Publication { private: std::string ISBN; std::string author; public: // 构造函数 Book(std::string t = "", std::string p = "", double pr = 0.0, std::string is = "", std::string a = "") : Publication(t, p, pr), ISBN(is), author(a) {} // 获取和设置方法 void setISBN(const std::string& is) { ISBN = is; } std::string getISBN() const { return ISBN; } void setAuthor(const std::string& a) { author = a; } std::string getAuthor() const { return author; } }; // 派生类:Magazine class Magazine : public Publication { private: char frequency; std::string editor; public: // 构造函数 Magazine(std::string t = "", std::string p = "", double pr = 0.0, char f = 'M', std::string e = "") : Publication(t, p, pr), frequency(f), editor(e) {} // 获取和设置方法 void setFrequency(char f) { frequency = f; } char getFrequency() const { return frequency; } void setEditor(const std::string& e) { editor = e; } std::string getEditor() const { return editor; } }; ``` **解释:** - 基类 `Publication` 包含了 `book` 和 `magazine` 共有的属性:`title`、`publisher` 和 `price`。 - `Book` 和 `Magazine` 分别从 `Publication` 派生而来,并添加了各自特有的属性。 - 构造函数通过初始化列表调用了基类的构造函数,确保了基类成员的正确初始化。 - 未使用 `using namespace std;`,所有标准库相关的类型均显式指定了 `std::` 前缀。 --- #### 2. 使用继承设计 `library_book` 类(不使用 `using namespace std;`) 从 `book` 类派生出 `library_book` 类。新的类需要记录书籍借阅的详细信息,例如借阅日期和借阅者编号。 以下是代码实现: ```cpp #include <iostream> #include <string> // 图书馆书籍类:Library_Book class Library_Book : public Book { private: int libraryNumber; // 图书馆用户的六位编号 std::string borrowDate; // 借阅日期 public: // 构造函数 Library_Book(std::string t = "", std::string p = "", double pr = 0.0, std::string is = "", std::string a = "", int ln = 0, std::string bd = "") : Book(t, p, pr, is, a), libraryNumber(ln), borrowDate(bd) {} // 获取和设置方法 void setLibraryNumber(int ln) { libraryNumber = ln; } int getLibraryNumber() const { return libraryNumber; } void setBorrowDate(const std::string& bd) { borrowDate = bd; } std::string getBorrowDate() const { return borrowDate; } // 打印借阅信息 void printBorrowDetails() const { std::cout << "Title: " << getTitle() << std::endl; std::cout << "Author: " << getAuthor() << std::endl; std::cout << "Library Number: " << libraryNumber << std::endl; std::cout << "Borrow Date: " << borrowDate << std::endl; } }; ``` **解释:** - `Library_Book` 从 `Book` 类派生而来。 - 新增了两个成员变量:`libraryNumber` 和 `borrowDate`,分别表示借阅者的编号和借阅日期。 - 提供了设置和获取这些成员的方法,以及打印借阅信息的功能。 - 同样未使用 `using namespace std;`,所有标准库相关的类型均显式指定了 `std::` 前缀。 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值