zoukankan      html  css  js  c++  java
  • C++ 对象创建的问题

      一、C++对象的创建:

        对象创建的注意事项:

          1.对象数组里的个数,就是创建对象的个数,普通数组一样;下标从0 到数组里数字 -1;

          2.类名*  对象指针   <-->  这里只是一个指针,占4个字节,所以就不得初始化;

    #include <iostream>
    using  namespace std;
    
    class A{
        public: int f;
        A(){
        cout<<"调用了构造函数"<<endl;
        }   
        ~A()
        {   
            cout<<"hh"<<endl;
        }   
    };
    
    int main(void){
    
        A a[4]; //对象数组,这里产生4个对象,和数组有差别;
        cout<<endl;
        A b;
        cout<< endl;
        A *p;//这里是一个A类的对象指针,占用4个字节,类的大小不止4个字节;并不会调用构造函数
    
        return 0;

      这里的执行结果是

      

    调用了构造函数
    调用了构造函数
    调用了构造函数
    调用了构造函数

    调用了构造函数


    hh
    hh
    hh
    hh
    hh

    继承关系的构造函数和析构函数

    1.

    #include <iostream>
    using namespace std;
    
    class A{
        public:
        A(){
            cout<< "A.constructor"<<endl;
        }
        ~A(){
            cout<<"A.deconstructor"<<endl;
        }
    };
    
    class B :public A{
        public:
        B(){
            cout<<"B.constructor"<<endl;
        }
        ~B(){
            cout<<"B.deconstructor"<<endl;
        }
    };
    
    
    int main(void){
         //A* a ;
         B* p = new B();
         delete p;
         return 0; 
    } 

    上述代码执行结果:

    A.constructor
    B.constructor
    B.deconstructor
    A.deconstructor

    --------------------------------

    B* p ; 这样是不会执行构造函数,析构函数 ,

    B* p = new B(); 创建一个指针对象*p ,只进行A,B的构造函数

    delete p;// 这里是相当于执行析构函数 

    ----

    若上述代码只有定义对象 

    A *a; 不会进行任何操作

    A* a = new A()  这样会执行A类构造函数

    delete a ;这句会执行 析构函数的东西

    #include <iostream>
    using namespace std;
    
    class A{
        public:
            A(void){
                m_name = "";
                m_age = 0;
                cout<<"A.c"<<endl;
            }
            A(string const& name,int age):m_name(name),m_age(age){
                        cout<<m_name<<m_age<<endl;
            }
            
            ~A(){
                cout<<"A.d"<<endl;
            }
        private:
            int m_age;
            string m_name; 
    };
    
    
    int main(void){
        //下面的这几种都会完成对象创建过程中执行的基本操作:构造->析构 
        //A a;
        A a = A();
        //A a = A();
        //A a("张飞",25);
        //A a = A("张飞",25);
        
        
        //下面这三种情况只能new出来构造函数,和malloc区别的是,new
        //能够调用构造函数,而malloc则不会 
        //A* a = new A;
        //A* a = new A();
        //A* a = new A("张飞",25); 
    }

      二、return、break、exit 三个关键字的解释

       1.return 针对函数返回值时候的一种退出

       2.break,只在循环语句中,起到退出循环的作用

       3.exit(status) 这个是直接结束进程,程序就不会再执行

  • 相关阅读:
    列表推导式和生成器表达式
    迭代器和生成器
    闭包和装饰器
    函数命名空间和作用域
    华为笔试题06
    华为笔试题05
    华为笔试题04
    华为笔试题03
    华为笔试题02
    华为笔试题01
  • 原文地址:https://www.cnblogs.com/Kernel001/p/7774197.html
Copyright © 2011-2022 走看看