C++子对象和堆对象

C++复习资料 访问权限修饰符:公有的(public)、私有的(private)和保护的(protected);公有部分:一些操作(即成员函数),是提供给用户的接口功能;私有部分:一些数据成员,通常用来描述该类中的对象的属性;只有成员函数或者经过特殊说明的函数才可以引用它们。//指针是没有办法直接引用的。 阅读详情
子对象

  当一个类的成员是某一个类的对象时,该对象就为子对象。子对象实际就是对象成员。如:

class A
{
 public:
  …
 private:
  …
};
class B
 {
  public:
   …
  private:
   A a;
   …
 };


  其中,B类中成员a就是子对象,它是A类的对象作为B类的成员。

  在类中出现了子对象或称对象成员时,该类的构造函数要包含对子对象的初始化,通常采用成员初始化表的方法来初始化子对象。在成员初始化表中包含对子对象的初始化和对类中其他成员的初始化。下面举一例子说明成员初始化的构造。

#include

class A
{
public:
A(int i, int j) { A1=i; A2=j; }
void print() { cout< private:
int A1, A2;
};

class B
{
public:
B(int i, int j, int k):a(i, j), b(k)
{
}
void print();
private:
A a; file://子对象
int b;
};

void B::print()
{
a.print();
cout< }

void main()
{
B b(6, 7, 8);
b.print();
}


  该程序的输出结果为:

  6,7
  8

  其中,a(i, j), b(k)是成员初始化表,它有二项,前一项是给子对象a初始化,其格式如下:

   <子对象名> (<参数表>)

  后一项是给类B的数据成员b初始化。这一项也可以写在构造函数的函数体内,使用赋值表达式语句

   b = k;

  给类B的数据成员初始化。

  堆对象

  所谓堆对象是指在程序运行过程中根据需要随时可以建立或删除的对象。这种堆对象被创建在内存一些空闲的存储单元中,这些存储单元被称为堆。它们可以被创建的堆对象占有,也可以通过删除堆对象而获得释放。

  创建或删除堆对象时,需要如下两个运算符:

   new

   delete

  这两个运算符又称为动态分配内存空间运算符。new相当于C语言中malloc()函数,而delete相当于C语言中free()函数。

  1. 运算符new的用法

  该运算符的功能是用来创建堆对象,或者说,它是用来动态地创建对象。

  new运算符使用格式如下:

  new <类型说明符> (<初始值列表>)

  它表明在堆中建立一个由<类型说明符>给定的类型的对象,并且由括号中的<初始值列表>给出被创建对象的初始值。如果省去括号和括号中的初始值,则被创建的对象选用缺省值。

  使用new运算符创建对象时,它可以根据其参数来选择适当的构造函数,它不用sizeof来计算对象所占的字节数,而可以计算其大小。

  new运算符返回一个指针,指针类型将与new所分配对象相匹配,如果不匹配可以通过强制类型的方法,否则将出现编译错。

  如果new运算符不能分配到所需要的内存,它将返回0,这时的指针为空指针。

  运算符new也可以用来创建数组类型的对象,即对象数组。其格式如下:

   new <类名> [<算术表达式>]

  其中,<算术表达式>的值为所创建的对象数组的大小。如:

   A *ptr;
   ptr = new A[5];

  new还可用来创建一般类型的数组。如:

   int *p;
   p = new int[10];

  使用new[]创建的对象数组或一般数组时,不能为该数组指定初始值,其初始值为缺省值。

  2. 运算符delete的用法

  该运算符的功能是用来删除使用new创建的对象或一般类型的指针。其格式如下:

   delete <指针名>

  例如:

   A *ptr;
   ptr = new A(5, 6);
   delete ptr;

  运算符delete也可用来删除使用new创建对象数组,其使用格式如下:

   delete[] <指针名>

  同样,delete也可以删除由new创建的一般类型的数组。如:

   int *p;
   p = new int[10];
   delete[] p;

  使用运算符delete时,应注意如下几点:

   (1) 它必须使用于由运算符new返回的指针;

   (2) 该运算符也适用于空指针(即其值为0的指针);

   (3) 指针名前只用一对方括号符,并且不管所删除数组的维数,忽略方括号内的任何数字。

  下面举一例子说明new运算符和delete运算符的使用方法。

#include

class AA
{
public:
AA(int i, int j)
{
A=i; B=j;
cout<<"构造函数./n";
}
~AA() { cout<<"析构函数./n"; }
void print();
private:
int A, B;
};

void AA::print()
{
cout< }

void main()
{
AA *a1, *a2;
a1 = new AA(1, 2);
a2 = new AA(5, 6);
a1->print();
a2->print();
delete a1;
delete a2;
}


   该程序的输出结果为:

    构造函数.
    构造函数.
    1, 2
    5, 6
    构造函数.
    构造函数.

  从程序中可以看到:用new创建对象时,要调用构造函数,用delete删除对象时,要调用析构函数。如果创建或删除的时对象数组,对象数组有多少,就调用多少次构造函数或构造函数。

  在实际应用中,经常对于new运算符返回的指针进行检验,看是否分配了有效的内存空间。结合本例给出检验方法如下:

  if (!a1)
   {
    cout<<"Heap erroe!/n";
    exit(1);
   }

  下面再举一个使用new和delete运算符对一般指针和数组的例子。

#include
#include

void fun()
{
int *p;
if (p = new int)
{
*p = 5;
cout<<*p< delete p;
}
else
cout<<"Heap error!/n";
}

void main()
{
fun();
int *pa;
pa = new int[5];
if (!pa)
{
cout<<"Heap error!/n";
exit(1);
}
for (int i=0; i<5; i++)
pa[i] = i+1;
for (i=0; i<5; i++)
cout<<pa[i]<<" ";
cout< delete[] pa;
}
c++——继承类中的子对象和基类对象的初始化 为什么研究临时对象? 主要是为了提高程序的性能以及效率,因为临时对象的构造与析构对系统开销也是不小的,所以我们应该去了解它们,知道它们如何造成,从而尽可能去避免它们。临时对象是可以被编译器感知的。 下面的例子,可能有人认为"int temp"是"临时对象",但是其实不然,"int temp"仅仅是swap函数的局部变量。 #include void swap( int &a, 阅读详情

相关推荐

C++含有子对象的类 —— has-a关系

C++含有子对象的类 —— has-a关系 1.子对象初始化 I>子对象调用构造函数 可能会想到这样的初始化方式 class A { int a; public: A(int a = 0) : a(a) { cout << "A::A()" << endl; } }; class B { private: A obj1; A...

qq2071114140的博客 1232

【C++】子对象基础概念及其用法

一、什么是子对象 二、子对象的作用是什么 三、利用子对象实现

皓皓松的博客 1万+

【C++继承与派生之二】有子对象的派生类的构造函数

派生类中含有子对象的构造函数改如何书写呢?如果不清楚就赶紧点击吧!!

monkeyduck的专栏 2004

子对象

子对象:类A的对象objA在类B做数据成员,将类B中的数据成员objA称为子对象 定义: class A{ //类A的定义 }; class B{ private: A objA;//子对象 int z; }; 使用子对象的目的:完成二次封装 #include<iostream> using namespace std; class A{ public: void f...

qq_42727102的博客 2968

从零到一:移远EC200UCN_LA OpenCPU开发中的‘避坑’实战指南

本文详细介绍了移远EC200UCN_LA 4G通信模块的OpenCPU开发实战指南,涵盖开发环境搭建、项目构建、通信接口开发、调试技巧及固件升级等关键环节。通过避坑经验和实用技巧,帮助开发者高效完成二次开发,提升4G通信模块的应用开发效率。

weixin_29159711的博客 508

统一大型语言模型和知识图谱:路线图

大型语言模型(LLM),如ChatGPT和GPT4,由于其涌现能力和泛化性,正在自然语言处理和人工智能领域掀起新的浪潮。然而,LLM是黑箱模型,通常无法捕捉和获取事实知识。相反,知识图谱(KGs),例如维基百科和华普,是显式存储丰富事实知识的结构化知识模型。KGs可以通过为推理和可解释性提供外部知识来增强LLM。同时,KGs很难从本质上构建和演化,这对KGs中现有的生成新事实和表示未知知识的方法提出了挑战。因此,将LLM和KGs统一在一起并同时利用它们的优势是相辅相成的。

qq_32907491的博客 2843

算法数据结构基础——堆栈

堆栈(Stack):简称为栈。一种线性表数据结构,是一种只允许在表的一端进行插入和删除操作的线性表。我们把栈中允许插入和删除的一端称为「栈顶(top)」;另一端则称为「栈底(bottom)」。当表中没有任何数据元素时,称之为「空栈」。「插入操作」和「删除操作」。栈的插入操作又称为「入栈」或者「进栈」。栈的删除操作又称为「出栈」或者「退栈」。简单来说,栈是一种「后进先出(Last In First Out)」的线性表,简称为「LIFO 结构」。我们可以从两个方面来解释一下栈的定义:第一个方面是。

白话机器学习 7745

若依前后端分离版集成nacos

服务动态配置与服务注册发现根据公司要求,需要将项目集成到nacos中,当前项目是基于若依前后端分离版开发的,若依的版本为3.8.3,若依框架中整合的springBoot版本为2.5.14。Nacos核心提供两个功能:服务注册与发现,动态配置管理。

NDF923的专栏 4645

c++3.5子对象和堆对象

3.5.1子对象 1.子对象的声明 一个对象作为另一个类的成员时,该对象称为类的子对象。子对象实际是某个类的数据成员。

misakisaigao的博客 1080

别再只调陀螺仪了!用OpenCV实现基于透视变换的EIS防抖,实测效果媲美手机

本文深入探讨了基于透视变换的EIS电子稳像技术,通过OpenCV实现高阶防抖算法,效果媲美主流手机厂商方案。详细解析了传统旋转平移模型的局限性,并展示了透视变换在复杂场景下的优势,包括数学原理、OpenCV实战代码及性能优化技巧,为视频防抖提供了专业解决方案。

weixin_42613501的博客 454

【肌电处理】肌电信号EMG积分肌电值+均方根值+中值频率+平均功率频率【含Matlab源码 3386期】

肌电信号EMG积分肌电值+均方根值+中值频率+平均功率频率 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 826

【C++】【继承】【子对象】【构造函数】含子对象的派生类的构造函数写法

(1)子对象的概念:若派生类A1的数据成员中包含基类A的对象a,则a为派生类A1的子对象 (2)含子对象的派生类的构造函数的执行顺序是: ①调用基类构造函数,对基类数据成员初始化 ②调用子对象构造函数,对子对象数据成员初始化 ③执行派生类构造函数本身,对派生类数据成员初始化 (3)含子对象的派生类的构造函数的一般形式: 派生类构造函数名(总参数表):基类构造函数名(参数表),子对象名(参数表){派生类中新增数据成员初始化语句}

m0_57050876的博客 471

MATLAB - Gazebo 联合仿真 —— 使用 UR10 机械臂检测和采摘水果

本示例演示如何在 Gazebo 物理模拟器中设置 Universal Robotics UR10 机械臂和仿真环境。您需要配置一个机器人从树上摘苹果的仿真环境。本示例演示如何利用这些工具箱,使用 Universal Robotics UR10 机械手模拟机器人检测并从树上摘取苹果。Robotics System Toolbox™ - 在 Simulink® 和 Gazebo 中对机械手进行建模、规划和模拟。Navigation Toolbox™ - 生成三维环境的占用图。

机器人控制与仿真应用 4185

C++新特性(类与对象的各种指针和引用)

对象与函数的关系(知道如何把对象指针和引用作为函数参数)   将对象指针作为函数的参数,传递给函数处理有两个好处 1、减少数据分配的时间和空间,提高了程序运行的效率; 2、在被调函数中,可以直接改变实参对象的值,实现函数之间的信息交换。 通过一个例子感受 对象指针作为函数的参数 #include using namespace std; class CPoint{ pu

pearl333的专栏 4743

【OAG vs RAG】RAG的“语义崩溃“:为什么你的知识库越大,AI越笨?_语义检索oag-优快云博客

19.9 元(AI 编程 / Agent 实战 | 本文同主题系统课程)·49.9 元(AI 时代成长方法论)。单篇不过瘾?订阅解锁全量源码、实战与答疑;文末附资料包领取方式 ↓图1:RAG语义崩溃概念图。

求知若渴、虚心若愚 73

QGis软件 —— 2、QGis加载在线地图两种方式(谷歌地图、天地图)

QGis软件 —— 2、QGis加载在线地图两种方式(谷歌地图)

1万+

C++ 析构函数、对象的创建和销毁过程

1. 什么是析构函数 1.1 语法 ~在C中是按位取反的操作。 析构函数是对象销毁时,自动被调用的,完成对象动态资源的清理操作。 这里的动态资源指的是,只是通过对象里面的成员所维护的,不是对象本身的资源。需要手动销毁清理的。 不能被重载,所以一个类只有一个析构函数。 2. 析构函数的应用 第二句中离开作用域的意思应该就是,离开了对象定义时所在的{ }。而不是对象所在函数结束时(即 return时)。 #include <iostream> #include <unistd

xueHui 4427

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C++学习笔记之类和对象IV

子对象:一个类的成员是某个类的对象,这个对象就为子对象,类的构造函数要包含对子对象的初始化,通常采用成员初始化表的方法。 #include <iostream.h> class P { public: P(int i,int j){m=i,n=j;} void print(){cout<<m<<","<<n<<endl;} ...

weixin_30613727的博客 82

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

c++面向对象程序设计教程——类

c++面向对象的教程,带你深度认识c++中对象和类

qq_59931372的博客 1902

c++面向对象程序设计 通俗版(未完

面向对象程序设计的特点:封装、继承、多态用class定义类,类中包括public公有,protected受保护,private私有类型的成员(继承才会用到protected类型,平常它和private一样,所以平常也不用)。public是对外的接口,里面放函数;private是类中的私有成员,一般放数据。当然public里面也可以放数据,private也可以放函数,但是一般正常人不这么干。

sylviiiiiia的博客 956

C++中的子对象

当一个类的成员是某一个类的对象时,该对象就为子对象。子对象实际就是对象成员。例如:class A       { ……. }       class B       { public: …….        private:  A  a;……… };其中, a是子对象,它是A类的对象作为B类的成员。在类中出现了子对象或对象成员时,该类的构造函数要包含对子对象的初始化,通

1751

c语言子对象,C++有子对象的派生类的构造函数

类的数据成员不但可以是标准型(如int、char)或系统提供的类型(如string),还可以包含类对象,如可以在声明一个类时包含这样的数据成员:Student s1; //Student是已声明的类名,s1是Student类的对象这时,s1就是类对象中的内嵌对象,称为子对象(subobject),即对象中的对象。通过例子来说明问题。在例11.5(具体代码请查看:C++派生类的构造函数)中的派生类...

weixin_29798865的博客 699

c++的子对象,继承和多态

C++子对象   C++的子对象其实相当于继承的另一种表现方式,一个类要调另一个类的方法,(当然也能够继承),在这个类例如son中数据成员写一个类base的对象m1,在son的构造函数中也要调用base的构造,然后就可以通过类son的对象调用类base的方法。实现代码如下: #include using namespacestd; class base { private:int x

smallsun 853

C++有子对象的派生类的构造函数

类的数据成员不但可以是标准型(如int、char)或系统提供的类型(如string),还可以包含类对象,如可以在声明一个类时包含这样的数据成员:class B{ … }; class A{ public: B s1; //B是已声明的类名,s1是B类的对象 … };这时,s1就是类对象中的内嵌对象,称为子对象(subobject),即对象中的对象。在派生类中,子对象为基类在派生

qq1169091731的博客 3487
上一篇: C++常类型(const)
下一篇: [CB]将窗体从属于主窗体
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值