c++小程序求详解!

2025-04-07 08:27:40
推荐回答(1个)
回答1:

(我不需要积分)
1. C++中,创建子类对象时,父类的构造函数按照子类定义时的顺序依次递归调用,具体如下:
D有两个基类B和C;
创建B:B <- A,即先调用A()再调用B()从而完成D中基类B的初始化(创建);
创建C:C <- A
创建D(整个): D <- C <- A <-B <-A

2. C++对象的销毁则执行相反的过程:
先释放D的资源: ~D()
然后: ~C()
最后: ~B()

4. 对象模型是面向对象语言的核心,对于c++/python/java这样的面向对象语言都是这样的。对象模型规定了对象在内存中怎么布局,对象的方法和属性怎么定义,对象的方法和方法怎么访问以及可能的访问限制等。在程序设计中,这主要是语言方面的问题。熟悉了这些,就可以根据语言特点做一些简单的设计,设计模式就是语言特征在具体问题场景下的技巧或者应用。

5. 看书一般花时间多,且效果不好,建议开始有不懂的方面,直接搜索相关的网页一步一步学习。(想学习C++,也可以看看 the C++ programming language, understanding the C++ object model这样的书,有关于C++对象内存布局,继承的初始化等方面。)

6. 测试代码(稍有调整):
#include
using namespace std;

class A {
public:
A(char *s)
{
cout << "create A: " << s << endl;
}
~A() { cout << "destroy A." << endl; }
};

class B:public A {
public:
B(char *sl,char *s2) :A(sl)
{
cout << "create B: " << s2 << endl;
}
~B() { cout << "destroy B." << endl; }
};

class C:public A
{
public:
C(char *sl,char *s2) :A(sl)
{
cout << "create C: " << s2 << endl;
}
~C() { cout << "destroy C." << endl; }
};

class D:public B,public C
{
public:
D(char *sl,char *s2,char *s3,char *s4) :B(sl,s2),C(sl,s3)
{
cout << "create D: " << s4 << endl;
}
~D() { cout << "destroy D." << endl; }
};

int main(int argc, char *argv[])
{
D d("class A","class B","class C","class D");
return 0;
}