考题1
#include<iostream>
using namespace std;
int x = 0;
class A {
public:
A() { x = 12; }
virtual ~A() { x = 12; }
void func1() { x = 13; }
void func2() { func3(); }
virtual void func3() { x = 14;}
};
class B :public A {
public:
B() { x = 21; }
virtual ~B() { x = 22; }
void func1() { x = 23; }
void func2() { func3(); }
virtual void func3() { x = 24; }
};
B testb; //注意这里
B* testc; //
int main()
{
A* testa;
cout << x << endl; // X=21
testa = (A*)&testb;
cout << x << endl; // X=21
testa->func1();
cout << x << endl; // X=13
testc = new B;
cout << x << endl; // X=21
delete testc;
cout << x << endl; // X=12
testa->func2();
cout << x << endl; // X=24
return 0;
}
考题2
#include<iostream>
using namespace std;
class A {
public:
virtual int func(int i = 1) {
std::cout << "class A" << std::endl;
return i + 1;
}
virtual ~A() {}
};
class B :public A {
public:
virtual int func(int i = 10) {
std::cout << "class B " << i << std::endl;
return i;
}
};
int main(int argc, char* argv[]) {
A* p = new B();
std::cout << p->func() << std::endl; //输出: class B 1 1
delete p;
return 0;
}
考题3
#include<iostream>
using namespace std;
class A {
public:
A() { g(); }
~A() { cout << "~A::A()" << endl;; }
void f() { cout << "A::f()"<<endl; }
virtual void g() { cout << "A::g()"<<endl; }
};
class B:public A {
public:
B() { g(); }
~B() { cout << "~B::B()"<<endl; }
void f() { cout << "B::f()" << endl; }
void g() { cout << "B::g()" << endl;; }
};
int main()
{
A* p = new B;
p->f();
p->g();
delete p;
}
输出
A::g()
B::g()
A::f()
B::g()
~A::A()