阅读下列程序,写出运行结果。#include <iostream.h>

23.阅读下列程序,写出运行结果。
#include <iostream.h>
class Base {
public:
Base(int n)
{ cout << "现在进入 Base 基类的构造函数\n";
i=n;
}
~Base( ) { cout <<"现在进入 Base 基类的析构函数\n"; }
void showi( ) { cout << i << endl; }
private:
int i;
};

class Derive:public Base {
public :
Derive(int n, int m):Base(m)
{ cout << "现在进入 Derive 派生类的构造函数\n";
j=n;
}
~Derive( )
{ cout <<"现在进入 Derive 派生类的析构函数“<<endl; }
void showj( ) { cout << j << endl; }
private:
int j;
};
void main( )
{ Derive obj(0,40);
obj.showi( );
}

当然是40, 你在构造obj对象的时候传入了0, 40分别对应了构造函数中的n, m变量
关键的一句 Derive(int n, int m):Base(m) , 这里调用其父类的构造, 并将m传入, 而m是40, 故父类对象中的i值为40, 不过这里注意,初始化列表最好另起一行更清晰, 如

Derive(int n, int m)
:Base(m)
{
// .....

}

最后obj.showi()是继承的父类中的函数, 而变量i也继承了过来, 故打印的就是40
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-24
现在进入 Base 基类的构造函数
现在进入 Derive 派生类的构造函数
40
现在进入 Derive 派生类的析构函数
现在进入 Base 基类的析构函数

构造函数跟析构函数顺序是反的本回答被提问者采纳
第2个回答  2013-06-24
现在进入 Base 基类的构造函数
现在进入 Derive 派生类的构造函数
40
现在进入 Derive 派生类的析构函数
现在进入 Base 基类的析构函数

...以下程序,分析运行结果。 #include <iostream.h> class B1 { public...
分析的结果就是析构的顺序和构造的顺序相反。先构造的后析构。

...#include "stdafx.h" #include<iostream.h> #include<string.h>...
include "stdafx.h"include<iostream> \/\/Here include<string.h> using namespace std; \/\/Here class A{ char *p;void clear() { if (p) { delete p; p = NULL; } } public:A(char *pp){ p=new char[strlen(pp)+1]; \/\/Here if (p) { strcpy(p,pp);cout<<"new ..."<<p...

.下列程序的输出结果是#include <iostream.h> void swap(int*,
所以输出的结果是 a=40, b=20

下面程序的输出结果是()#include<iostream.h>;classexample
下面程序的输出结果是()#include<iostream.h>;classexample { inta;public:example(intb){a=b++;} voidprint(){a=a+1;cout<<a<<"";} voidprint()const{cout<<a;} };voidmain(){ examplex(3);constexampley(2);x.print();y.print();} A.22 B.43 C.42 D.32 ...

阅读程序写结果:#include<iostream.h> void main0 { int a,b; char...
请任意一个表达式:5\/8 5\/8=0

C语言题 求运行结果 。给出下列程序的输出结果?
include <iostream> include <string.h> void upper(char *c,int n) { for(char *p=c;p<c+n;p++)if(*p>='a'&&*p<='z') *p=*p-32;} int main() { char s[]="How Are You?";upper(s,strlen(s));std::cout<<s<<std::endl;} 输出 HOW ARE YOU?

4.26 C语言,一下程序运行后输出结果是#include<stdio.h>
另外你的程序写得有一点点问题,以下是VC下测试通过版本 include "stdafx.h"include <iostream> using namespace std;void f(char *s,char *t){ char k;k=*s;s=*t;t=k;s++;t--;if(*s)f(s,t);} void main(){ char str[10]="welcome",*p;p=str+strlen(str)\/2+1;f(p,p-...

#include <iostream.h> void main() { int a[3][3]={1,2,3,4,5,6...
你只要记住两点就成了 第一是所有a[i]在运算时都是以*(a + i)这种形式出现的 第二是[]的优先级比*要高,一般来讲在标识符右边的比在左边的高 所以 cout<<*(*(a+i)+j)<<endl; 输出 5 这个没什么好解释的 cout<<*(a[i]+j)<<endl; 把a[i] 换成 *(a + i)和 cout<<*(...

#include<iostream.h> int main() { int x,a,b,c; for(x=100;x<=9...
include "iostream"include "vector"using namespace std;int main(){ int x,a,b,c;for(x=100;x<=999;x++){ \/\/计算三位数中的每一位 a=x\/100;b=(x\/10)%10;c=x%10;\/\/将三位数的每一位的三次方相加,得到sum int sum = a*a*a + b*b*b + c*c*c;\/\/如果sum和原数相同...

#include <iostream.h> void main() {int x; cin>>x; if(x--<5)cout...
cin>>x; x=5 if(x-- < 5); x=5<5?非真,所以走else,且由于x--,x=4 cout<<x++; 输出x=4后,x++,x=5

相似回答