一.普通指针版本


代码

#include<iostream>
using namespace std;class A
{public:A(){ax=2;cout<<"ax:"<<ax<<endl;};void print()const;float ax;
};//---------------------------------------------------------------------------------------------------
class B
{public:B();void print()const;
private:A* a;
};B::B()
{a=new A();a->ax=3;
}void B::print()const
{cout<<"&a="<<&a<<endl;cout<<"a->ax="<<a->ax<<endl;
}//---------------------------------------------------------------------------------------------------
int main()
{B b;b.print();return 0;
}

运行

二.智能指针版本


代码

#include<iostream>
#include<memory>
using namespace std;class A
{public:A(){ax=2;cout<<"ax:"<<ax<<endl;};void print()const;float ax;
};//---------------------------------------------------------------------------------------------------
class B
{public:B();void print()const;
private:shared_ptr<A> a;
};B::B()
{a=shared_ptr<A>(new A());a->ax=3;
}void B::print()const
{cout<<"&a="<<&a<<endl;cout<<"a->ax="<<a->ax<<endl;
}//---------------------------------------------------------------------------------------------------
int main()
{B b;b.print();return 0;
}

运行

C++ 在一个类中用指针的形式申请堆内存构造出另一个类并访问私有成员变量(包括智能指针版本)相关推荐

  1. 为什么静态成员函数可以访问私有成员变量?(访问控制是针对类而不是针对对象)

    访问控制是针对类而不是针对对象 先看几个标准定义 A member of a class can be - private; that is, its name can be used only by ...

  2. 设计复数类 Complex继承于数字类 Number,私有成员变量包括 double类型的实部rea(父类 Number中已定义)和虚部imag,公有成员方法包括两个构造方法(一个不带参数的和一个带两

    ​ 设计复数类 Complex继承于数字类 Number,私有成员变量包括 double类型的实部rea(父类 Number中已定义)和虚部imag,公有成员方法包括两个构造方法(一个不带参数的和一个 ...

  3. 封装之--通过类中公有方法访问私有成员变量

    如何在ClassB中访问ClassA的私有成员变量?(典型的封装案例) 通过在ClassA中定义公有的成员方法,然后,在ClassB中通过ClassA的对象调用ClassA中的公有方法,来访问Clas ...

  4. C++ 如何一次在堆上申请4G的内存?如何设计一个类只能在堆或者栈上创建对象?

    1.如何一次在堆上申请4G的内存? 因为32位的环境下虚拟地址空间的大小只有4g,而光内核空间就需要1g,所以不可能申请得到,只有在64位的环境下才可以实现,只需要把执行环境改为64x即可 #incl ...

  5. C++57个入门知识点_17 类的访问权限及C语言模拟类的封装(类的私有权限突破方法:编译期进行权限检查,运行期通过指针修改类的私有成员变量;利用函数指针对结构体中成员变量进行修改;CPU大小尾排列)

    接上篇:C++57个入门知识点_16 类的标准写法(类名.成员变量.成员函数及对象命名规则:成员变量一般为私有,成员函数为公有并暴露给外部使用成员变量:防止类过大,声明写在.h,实现写在.cpp,调用 ...

  6. malloc申请堆内存

    1.malloc申请的空间,是否记录空间大小?若是记录,那所记录的空间大小在哪呢?为什么利用free释放不需要空间大小参数呢? malloc申请空间时,记录其空间大小(其空间上方,有一个数据头,头部信 ...

  7. 【C++】内存管理到用new申请堆内存

    目录 前言 一.C/C++中程序内存区域划分 二.C++使用new申请堆内存 1.new和delete的使用 2.new和delete的底层实现 前言 hello~❥(ゝω・✿ฺ) 大家好呀!欢迎能够 ...

  8. java 私有成员方法_Java Reflection 教程(7):类私有成员变量和方法

    一般来说,不可以访问类的私有成员变量和调用类的私有方法.但通过Java Reflection API可以绕过这个限制,前面使用的getMethods, getFields,getConstructor ...

  9. 在python语言中定义私有成员变量的方法是_Python在类中有“私有”变量吗?

    回答(11) 2 years ago python中的私有变量或多或少是一个hack:解释器故意重命名变量 . class A: def __init__(self): self.__var = 12 ...

最新文章

  1. 走进元学习:概述不同类型的元学习方法
  2. compareto方法_compare方法和compareTo方法区别
  3. 浏览器是如何解析html的?
  4. cmd 无法切换目录
  5. 精选| 2021年9月R新包推荐(第58期)
  6. antd select option 设置字体颜色_匹配颜色是照片合成重要关键点
  7. 笔记《鸟哥的Linux私房菜》6 Linux的档案权限与目录配置
  8. edger多组差异性分析_edgeR基因表达差异分析
  9. 多版本并发控制MVCC和乐观锁OCC 是什么 区别
  10. 悄悄安装vcredist_x64.exe,不弹出对话框
  11. 瑞友天翼服务器系统资源不足,瑞友天翼问题处理
  12. ab服务器网页,使用ab进行web服务器压测详解
  13. Unity Shader入门精要学习笔记 - 第11章 让画面动起来
  14. 华为USG6320做双线-基于源地址的策略路由
  15. 用C语言循环码,xinxilunyubianma
  16. PHP实现jsapi微信支付
  17. 这个世界上有三种几何学
  18. P7961 [NOIP2021] 数列
  19. 推荐20个优秀企业技术博客
  20. mcnpf5输出结果_MCNP及用.ppt

热门文章

  1. 软件测试需注意的事项
  2. Numpy数据的操作 * dot() multiply() 的区别
  3. 洛谷P2534 [AHOI2012]铁盘整理
  4. python-socket2
  5. SpringCloud分布式开发五大神兽
  6. WEB-INF/views/menu/list.jsp (line: 26, column: 58) equal symbol expected
  7. [转] Linux C语言 段错误bug的调试
  8. C/C++库函数math用法案例篇一
  9. 计算机负数次幂科学表示,负数的科学计数法怎么表示
  10. linux未使用磁盘空间满,linux磁盘空间用满的处理方法