| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
问题1,如下代码 
- #include <iostream>
 
 - using namespace std;
 
 - class A{
 
 - public:
 
 -     A(){cout<<'x';}
 
 - };
 
  
- class B:public A{
 
 - private:
 
 -     int x;
 
 - public:
 
 -     B(int x):A(),x(x){cout<<x<<'t';}
 
 - };
 
  
- class C{
 
 - private:
 
 -     A a;
 
 -     B b;
 
 - public:
 
 -     C(int x):b(x){cout<<'r';}
 
 - };
 
 - void f(){
 
 -     A a1;
 
 -     B b1(2);
 
 -     C c1(3);
 
  
- }
 
 - int main() {
 
 -     cout<<"bienvenue!\n";
 
 -     f();
 
 -     cout<<"au revoire!\n";
 
 - }
 
  复制代码 
 
输出为: 
- bienvenue!
 
 - xx2txx3trau revoire!
 
  
- Process finished with exit code 0
 
  复制代码 
我想问对象a1输出x 对象b1输出x2t,对象c1输出xx3tr,我就想问开始的两个“xx”是从哪来的,为啥我自己写的只有一个x呢? 
 
问题2:如下代码 
- #include <iostream>
 
 - using namespace std;
 
 - class A{
 
 - public:
 
 -     A(){cout<<'a';}
 
 -     ~A(){cout<<"b\n";}
 
 - };
 
  
- class B:public A{
 
 - private:
 
 -     int x;
 
 - public:
 
 -     B(int x):A(),x(x){cout<<'c'<<x;}
 
 -     ~B(){cout<<"~B"<<x;}
 
 - };
 
 - class C{
 
 - private:
 
 -     A a;
 
 -     B b;
 
 - public:
 
 -     C(int x):b(x){cout<<'d';}
 
 -     ~C(){cout<<'e';}
 
 - };
 
 - void f(){
 
 -     A a1;
 
 -     B b1(2);
 
 -     C c1(3);
 
 - }
 
 - int main() {
 
 -     cout<<"hello\n";
 
 -     f();
 
 -     cout<<"goodbye\n";
 
 - }
 
  复制代码 
输出结果为: 
- hello
 
 - aac2aac3de~B3b
 
 - b
 
 - ~B2b
 
 - b
 
 - goodbye
 
  
- Process finished with exit code 0
 
  复制代码 
 
我想问我开始写出来的和输出结果完全不一样,请问有大神可以细致讲解下这个每一步的构造和析构过程吗,谢谢~! 
 
 
问题3:如下代码 
- #include <iostream>
 
 - using namespace std;
 
 - class A{
 
 - public:
 
 -     void f(){cout<<"hello!";}
 
 - };
 
  
- int max(int *p,int n){
 
 -     int max=p[0];
 
 -     for(int i=1;i<n;i++){
 
 -         if(max<p[i]){
 
 -             max=p[i];
 
 -         }
 
 -         return max;
 
 -     }
 
  
-     void fillMax(int *p,int n){
 
 -         int max=max(*p,n);
 
 -         for(int i=0;i<n;i++){
 
 -             *p++=max;
 
 -         }
 
 -     }
 
 - }
 
 - int main() {
 
 -     A a1;
 
 -     A a2();
 
 -     A *p;
 
 -     const A a3;
 
 -     p=&a1;
 
 -     //p=&a3; illegal, a3 is const;
 
 -     const A *q;
 
 -     q=&a1;
 
 -     //A *const r; r can not change, must be initialized??????????????
 
 -     a1.f();
 
 -     p->f();//(*p).f()
 
 -     (*p).f();
 
 -     //a2.f(); illegal
 
 -     //q->f(); illegal q is a pointer to const, f is not const;
 
 -     return 0;
 
 - }
 
  复制代码 
 
我想问一下A *const r;   const A r;   A const *r;   const A *r; A const r 有啥区别呢,在实现p->f()的时候分别有哪些结果呢? 
A *const r; r can not change, must be initialized??????????????这一句为啥要初始化,const A * q; A  const *q就不用初始化呢?
- #include <iostream>
 
  
- class A
 
 - {
 
 - public:
 
 -         int x;
 
 -         A(): x(0) {}
 
 -         void f()
 
 -         {
 
 -                 std::cout << "hello!" << std::endl;
 
 -         }
 
 - };
 
  
- int main()
 
 - {
 
 -         A a1;
 
 -         A a2;
 
  
-         A *const r = &a1;        // 变量r是一个指针,这个const用来限制变量r,r只能在初始化的时候指向一个对象,之后就一直指向这个对象并且不能再指向其他对象
 
 -         r->x = 100;                // 可以
 
 -         r->f();                        // 可以
 
 -         //r = &a2;                // 不可以
 
  
-         return 0;
 
 - }
 
  复制代码 
 
 
 |   
 
 
 
 |