基类,派生类,内存分配情况?.xml

pre{
line-height:1;
color:#1e1e1e;
background-color:#d2d2d2;
font-size:16px;}.sysFunc{color:#627cf6;font-style:italic;font-weight:bold;}
.selfFuc{color:#800080;}
.bool{color:#d2576f;}
.condition{color:#000080;font-weight:bold;}
.key{color:#000080;}
.var{color:#800000;font-style:italic;}
.Digit{color:#ff00ff;font-weight:bold;}
.includePre{color:#1e1e1e;}
.operator?{color:#008000;font-weight:bold;}

派生类继承基类

??????内存分配时,是在于基类对象不同的内存地址处,按基类的成员变量类型,开辟一个同样的类型空间,但注意开辟后派生对象的空间,不是复制基类的成员的值,而是仅仅开辟那种成员类型的空间,未初始化时,里面存在的数是不确定的

???????然后派生类自己定义的成员变量是排在继承的A类成员下面,如果派生类定义的变量名与基类相同,则此变量覆盖掉继承的基类同名变量,注意,覆盖不是删除,也?就是派生类中继承自基类的成员变量依然存在,而且值也不发生变化。如果想用此继承自基类的成员变量,则要加::?,?在成员函数中访问时,直接用base::i,即可,用派生类的对象a访问时,如果此继承自基类的成员变量是对象可访问的(Public类型),则用?a.base::i访问之

?

Base?base;
Sub_class??sub;
base.i;
base.j

但是用对象访问派生类的继承自基类的成员变量时(假定public类型)

得用:

sub.Base::i
sub.Base::j

直接用sub.i,?访问的是子类自定义的i

如?以下程序

????class?base{
????public:
??????????int?i;
??????????int?j;
????};
????class?sub:public?base{
?????public:
?????????????int?i;
?????????????int?j;
????????void?p(){
??????????????????cout<<base::i<<endl;
??????????????????cout<<base::j<<endl;
?????????????????}????????
????};??
????base?b;
????sub?s;
????b.i=1;
????b.j=2;
????s.i=3;
????s.j=4;
????s.p();?????????????//???输出两个不确定的数?4425598???4421322
????cout<<b.i<<endl;??//???1
????cout<<b.j<<endl;???//???2
????cout<<s.i<<endl;???//???3
????cout<<s.j<<endl;???//???4
????cout<<s.base::i<<endl;
????cout<<s.base::j<<endl;

输出结果如下

4425598

4421322

1

2

3

4

4425598

4421322

Press?any?key?to?continue?.?.?.

从派生类对象继承的两个基类变量的值和及基类对象两个成员变量的值得比较看,足以验证上述结论:

子类继承的基类的成员,只是在另一个内存空间内开辟一个这种类型的成员变量,它的值并不是基类的值,编译器只是负责把这一部分空间类型设置为与基类的类型相同

本文使用?书画小说软件?发布,内容与软件无关,书画小说软件?更惬意的读、更舒心的写、更轻松的发布。

时间: 2024-10-22 05:05:13

基类,派生类,内存分配情况?.xml的相关文章

java类中属性的加载顺序,以及内存分配情况介绍

看下面例子及说明: /** 假如有外部类调用了该类,代码为:new StaticTest(); 那么下面是类属性的加载顺序 */ public class StaticTest{ public int dsd=2;//第3 //多个对象会有多次分配内存 public awds() { int sdsfsd=2;//第4 //多个对象会有多次分配内存 } //静态代码块 static{ System.out.println("静态代码块正在加载...");//第1 } public st

Python源码 -- C语言实现面向对象编程(基类&amp;派生类&amp;多态)

由于公司的ERP系统数据量大,有40G+的数据,并发用户90+,连接数1000+,原来的IO性能跟不上用户的操作响应需求,报表查询慢,该做的索引都做过了,索引每周重建一次,还是解决不了问题,为此,公司新购了dell poweredge R720xd服务器,该套服务器支持2个阵列,24个硬盘,双CPU,64G内存,比较牛X的了,我们创建两个raid,两块SAS硬盘做Raid1,6块SSD硬盘做Raid10,系统装好了,高兴呀,但结过测试发现,总有一个raid速度相当慢,和台式机速度一样,我地妈呀,

基类派生类

看了c#的教程,也上网络上搜索基类与派生类的概念,一直没有一个很明确的定义.弄得偶一直很迷糊,现在搜索到c++的教程里倒是有比较明确的说明,特意贴在这里,帮助自己理解. 继承机制提供了无限重复利用程序资源的一种途径. 继承使得我们得以用一种简单的方式来定义新类.如果我们定义了一个哺乳动物类,包括哺乳动物的一些普通属性和方法,然后再定义一个狗类, 有没有必要重头开始定义呢?实际上这是没有必要的,因为狗是哺乳动物的一种特殊动物,定义狗类可以沿用哺乳动物类的所需的属性和方法,只需加上狗的颜色属性和狗尾

C++-类和动态内存分配 大发彩_票平台开发

大发彩_票平台开发 地址一:[hubawl.com]狐霸源码论坛地址二:[bbscherry.com] 类和动态内存分配 动态内存和类 C++在分配内存时是让程序在运行时决定内存分配,而不是在编译时决定. 这样,可根据程序的需要,而不是根据一系列严格的存储类型规则来使用内存.C++使用new和delete运算符来动态控制内存. 1.1. 复习示例和静态类成员 这个程序使用了一个新的存储类型:静态类成员. //strngbad.h#include<iostream>#ifndef STRNGBA

类和动态内存分配

类和动态内存分配 整理自<C++ Primer Plus> 1. 动态内存和类 静态类成员有一个特点:无论创建了多少对象,程序都只创建一个静态类变量副本.也就是说,类的所有对象共享同一个静态成员.静态数据成员在类声明中声明,在包含类方法的文件中初始化. 复制构造函数用于将一个对象复制到新创建的对象中.也就是说,也就是说,它用于初始化过程中(包括按值传递参数),而不是常规的赋值过程中.按值传递意味着创建原始变量的一个副本.由于按值传递对象将调用复制构造函数,因此应该按引用传递对象.这样可以节省调

C++ primer plus读书笔记——第12章 类和动态内存分配

第12章 类和动态内存分配 1. 静态数据成员在类声明中声明,在包含类方法的文件中初始化.初始化时使用作用域运算符来指出静态成员所属的类.但如果静态成员是整形或枚举型const,则可以在类声明中初始化. P426-P427类静态成员的声明和初始化 //strnbad.h class StringBad { private: static int num_strings; … }; //strnbad.cpp int StringBad::num_strings = 0; 不能在类声明中初始化静态

《C++ Primer Plus》读书笔记之十—类和动态内存分配

第12章 类和动态内存分配 1.不能在类声明中初始化静态成员变量,这是因为声明描述了如何分配内存,但并不分配内存.可以在类声明之外使用单独的语句进行初始化,这是因为静态类成员是单独存储的,而不是对象的组成部分.注意:静态成员在类声明中声明,在包含类方法的文件中初始化.初始化时使用作用域操作符来指出静态成员所属的类.但如果静态成员是整型或枚举型const,则可以在类声明中初始化. 2.当使用一个对象来初始化另一个新建对象时,编译器将自动生成一个复制构造函数,因为它创建对象的一个副本.复制构造函数的

C++ 学习笔记之---类和动态内存分配

参考自<C++ primer plus 6th edition> 请各位放大观看吧,感觉博客园的编辑器有点坑.用图片之后,又发现太小,所以... 程序对内存的使用: 链接:http://zhidao.baidu.com/link?url=An7QXTHSZF7zN9rAuY05mvaHHar0xIpgK6Yqp9oAkm2GmZYoTAz9UpN4JuhWJvSLsbu0-lOcO47PzXcNWda6gK 定义静态成员变量: 可以在类声明中定义静态成员变量,使用 static 修饰.不过,虽

《C++ Primer Plus》12.6 复习各种(类和动态内存分配的)技术 笔记

12.6.1 重载<<运算符要重新定义<<运算符,以便将它和cout一起用来显示对象的内容,请定义下面的友元运算符函数:ostream & operator<<(ostream & os, const c_name & obj){    os << ...;  // display object contents    return os;}其中,c_name是类名.如果该类提供了能够返回所需内容的公有方法,则可在运算符函数中使用这些