新手关于C语言中类(Classes)的问题,求高手!

Python045

新手关于C语言中类(Classes)的问题,求高手!,第1张

#include<iostream>

using namespace std

class X

{

int x//定义类X的私有实例成员变量x

public:

X() {x=0} //默认构造函数(无参数),将x初始化为0

X(int xx) {x=xx} //重载的构造函数,将x初始化为xx

//虚函数,输出x的值,子类可以覆盖(重写)虚函数,从而实现多态

virtual void prt() {cout<<x}

}

//类Y公共继承自类X,即Y是X的子类

class Y:public X

{

int y//定义类Y的私有实例成员变量y

public:

//以下两行都是类Y的构造函数,它们都隐式调用了父类X

//的默认构造函数,以初始化父类的实例成员变量x(都初始化成0了)

Y() {y=0}

Y(int yy) {y=yy}

//这是覆盖(重写)父类的虚函数prt

void prt() {cout<<y}

}

int main()

{

//x(10)会调用带一个参数的构造函数X(int xx),创建一个类X的对象x,

//x的成员变量x初始化为10

//z会调用默认构造函数X(),创建一个类X的对象z,

//z的成员变量x初始化为0

//y(11)会调用带一个参数的构造函数Y(int yy)(Y的),创建一个类Y的对象y,

//y的成员变量y初始化为11,同时通过调用父类X的默认构造函数,

//将父类的成员变量x初始化为0

X x(10),zY y(11)

//将x赋给z,调用z的成员函数prt,输出显示10

z=xz.prt()

//将y赋给z,调用z的成员函数prt,输出显示0,

//因为调用的是父类X的prt,显示的是对象z的成员变量x的值

z=yz.prt()

//以下新加的会输出显示11,

//因为调用的是子类Y的prt,显示的是对象y的成员变量y的值

y.prt()

cout<<endl

system("PAUSE")

return EXIT_SUCCESS

}

没怎么听过这个概念,但是我觉得你说的应该是内存溢出和内存泄露这两个问题

内存溢出也就是定义的变量长度不足,内存不够储存数据导致数据超出界限,这通常是由于数据长度判断不严格造成的。好比只定义了一个能装5个苹果的盒子却要装8个苹果,剩下的3个只能放到其他苹果的位置了,其他的苹果就等于是被“重写”了

例子,定义了int a[2]变量,再定义int *p = a,当用p[2] = 0写入数据时,就发生了内存溢出。由于c语言只检查指针是否有效(能读写),这就可能导致指针被赋予一个特殊的值,比如指向程序代码部分,这时候往指针中写入的数据就有可能覆盖原本的命令,而且有可能被程序或者系统运行。还有一种情况就是错误的指针可能意外的修改了其他变量的值,这个通常在结构体变量中发生。

一句话就是溢出的内存

内存泄露就是给指针分配了内存却并未做回收,导致系统一直认为你正在使用这块内存,当不再有指针指向这块内存,也就是无法正常手动回收时,就造成了内存泄露。内存泄露会导致系统可用内存越来越少,直到再无内存可供分配或者程序被终止。由于系统自身代码缺陷而存在的内存泄露,由于除非关机重启,系统一直在运行,会导致泄露的内存一直得不到回收,最终内存耗尽系统崩溃死机