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