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) 这个是直接结束进程,程序就不会再执行

原文地址:https://www.cnblogs.com/Kernel001/p/7774197.html