C++中构造函数中的数据成员地址
The Data Member Address in the Constructor in C++
我有以下代码:
#include <iostream>
#include <string>
class Quote
{
public:
Quote() = default;
Quote(const std::string &b, double p) :
bookNo(b), price(p) {std::cout<<"The address of p is :"<<&p<<'n';}
std::string isbn() const {}
virtual double net_price(std::size_t n) const {return n * price;}
virtual ~Quote() = default;
private:
std::string bookNo;
protected:
double price = 0.0;
};
class Bulk_quote : public Quote
{
public:
Bulk_quote() = default;
Bulk_quote(const std::string& b, double p, std::size_t q, double disc) :
Quote(b, p), min_qty(q), discount(disc) { std::cout<<"The address of p is: " <<&p<<'n';}
double net_price(std::size_t n) const override;
private:
std::size_t min_qty = 0;
double discount = 0.0;
};
int main()
{
Bulk_quote bq("textbook", 11.0, 5, 0.5);
}
我运行代码并得到下面的输出,
The address of p is :0x7fff5fbff5e8
The address of p is: 0x7fff5fbff668
Program ended with exit code: 0
我的看法是派生类重用基类中的构造函数。两个"p"在两个类中完全相同,因此,两个"p"的地址应该相同。然而,我对输出的理解有所不同。
我的问题是为什么"p"的地址不同?提前感谢
您正在按值将参数double p
传递给基类构造函数。如果通过引用传递,则p
的地址将相同。另外,p
不是基类的成员,因此p
没有理由具有相同的地址。
地址不同,因此您可以在Quote::Quote(const std::string &b, double p)
中修改p
,而无需担心在构造函数BulkQuote::Bulk_quote(const std::string& b, double p, std::size_t q, double disc)
中更改p
。
相关文章:
- 用于访问容器<T>数据成员的正确 API
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 数据成员SFINAE的C++17测试:gcc vs clang
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 如何在c++中定义以struct为数据成员的类中的构造函数
- 静态数据成员模板专用化的实例化点在哪里
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 使用指针访问数组中的对象数据成员
- 友元函数无法访问私有数据成员 (c++)
- 我可以在 C++ 中将数据成员/变量从其定义之外添加到结构中吗?
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- 指向未由对象地址初始化的对象的指针如何将值分配给类的数据成员
- 对象和数据成员内存地址混淆
- 从数据成员(一次性嵌套类)中获取非 POD 对象的地址
- 单个结构数据成员的奇怪指针地址
- C++中构造函数中的数据成员地址
- CUDA:结构体的共享数据成员和对该结构体的引用成员具有不同的地址和值
- 重载运算符<<输出地址而不是数据成员
- standard_layout类的数据成员是否与对象的地址有固定的偏移量?
- Visual Studio中指向类数据成员的c++指针的地址