C/C++类
1、以下程序的输出是(12)
- class Base {
- public: Base(int j) : i(j) { }
- virtual ~Base() { } void func1()
- { i *= 10;
- func2(); }
- int getValue() {
- return i; }
- protected: virtual void func2()
- { i++;
- } protected:
- int i; };
- class Child : public Base
- { public:
- Child(int j) : Base(j) { } void func1()
- { i *= 100;
- func2(); }
- protected: void func2()
- { i += 2;
- } };
- int main(void)
- { Base *pb = new Child(1);
- pb->func1(); cout<<pb->getValue()<<endl;
- delete pb;
- return 0; }
2、请问程序的输出结果是(30)
#define DOUBLE(x) x+x // x*2
int i = DOUBLE(5)*5;
cout<<i<<endl;
3、写出一下程序的输出(死循环)
- int main(void) {
- char num; for(num = 0; num < 255; )
- num += num; printf("%d\n",num);
- return 0; }
4、程序出错在什么阶段?()
- int main(void) {
- http://www.sogou.com cout<<"welcome to sogou"<<endl;
- return 0;
- }
A、编译阶段出错 B、运行阶段出错 C、编译和运行都出错 D、程序运行正常
因为http://www.sogou.com中//后面是注释,前面的http:是标签(类似于goto语句中的标签)。(这个题目碉堡了)
5、下面程序执行结果为【说明:X86_64环境】(D)
- int main(void) {
- int a[4][4] = { {1,2,3,4},
- {50,60,70,80}, {900,1000,1100,1200},
- {13000,14000,15000,16000} }; int (*p1)[4] = a;
- int (*p2)[4] = &a[0]; int *p3 = &a[0][0];
- printf("%d %d %d %d\n",*(*(a+1)-1),*(*(p1+3)-2)+1,*(*(p2-1)+16)+2,*(p3+sizeof(p1)-3));
- return 0; }
A、16000 1101 13002 2
B、4 2 3 60
C、16000 2 3 2
D、4 1101 13002 60
p1为指向一维数组的指针,所以a + 1指向{50,60,70,80}这一维的地址。减一则为4的地址;同理第二个输出1101。同理,由于数组的列是4,所以*(p2 - 1) + 16就相当于*(p2) + 12,所以第三个输出13002。
第四个由于p1是指针,所以sizeof(p1)为8(68位的系统),所以第四个输出60。
6、在32位操作系统gcc编译器环境下,下面的程序的运行结果是(A)
- class A {
- public: int b;
- char c; virtual void print()
- { cout<<"this is father's function!"<<endl;
- } };
- class B : A
- { public:
- virtual void print() {
- cout<<"this is children's function!"<<endl; }
- }; int main(void)
- { cout<<sizeof(A)<<" "<<sizeof(A)<<endl;
- return 0;
- }
A、12 12
B、8 8
C、9 9
D、12 16
7、以下哪些做法是不正确或者应该极力避免的:【多选】(ACD)
A、构造函数声明为虚函数
B、派生关系中的基类析构函数声明为虚函数
C、构造函数调用虚函数
D、析构函数调用虚函数