C++面向对象初步

.h头文件
#ifndef TEACHER_H
#define TEACHER_H


class teacher
{
public:
     int age;
public:
     void setage(int age);
     int getage();
};

#endif // TEACHER_H

下方是对应的cpp文件。将方法分开写的。与Java不一样。本质可以写一起的分开好管理。

#include "teacher.h"

void teacher::setage(int a)
{
    age=a;
}

int teacher::getage()
{
    return age;
}
#include <iostream>
#include "teacher.h"

using namespace std;

int main()
{
    teacher t;
    t.setage(10);
    cout << t.getage() << endl;
    return 0;
}

正常调用。导入头文件即可。

#include <iostream>


using namespace std;
class teache
{
public:
     teache()//构造函数,类的初始化时加载。无参时才会调用
    {

       cout<<"我是构造函数"<<endl;
    }
    teache(int a){
            age=a;
    }
     teache(const teache &obj){//当然此函数可以不用写,在调用时需要执行的操作。深拷贝需重写。
     cout<<"我是拷贝函数"<<endl;
     }
    int getage(){

        return age;
    }

    ~teache()//析构函数,类的对象销毁时调用,相当于delete方法
    {
      cout<<"我是析构函数"<<endl;
    }
private:
    int age;
};

int main()
{
    teache t1(10);//带参构造的三种方法
    teache t2=(10,20);
    teache  ta=t2;//当执行这条语句时,实则将t2拷贝给ta。调用拷贝函数。

    teache t3=teache(12);
    cout<<t3.getage()<<endl;
    system("pause");
    teache tw;
}

1)当类中没有定义任何一个构造函数时,c++编译器会提供默认无参构造函数和默认拷贝构造函数

2)当类中定义了拷贝构造函数时,c++编译器不会提供无参数构造函数

3) 当类中定义了任意的非拷贝构造函数(即:当类中提供了有参构造函数或无参构造函数),c++编译器不会提供默认无参构造函数

4 )默认拷贝构造函数成员变量简单赋值

总结:只要你写了构造函数,那么你必须用。

使用类似于 teache a=("xxxx");teache b=a;实际是在teache进入栈内存,在堆内存分配出空间给字符串,b浅拷贝了a。两个指向同一个堆内存,弱析构函数存在回收对象的方法,实则调用两次析构方法,但堆内存只有一个数据会报错。解决方案,书写深拷贝构造函数,格式为teache (const char *t),将带参构造函数再写一遍,在堆内存空间写两个字符串。


#include <iostream>

using namespace std;

class A
{
public :
      A(int a_){
            a=a_;
            cout<<"A的构造构"<<endl;
      }
      ~A(){
        cout<<"A的析构"<<a<<endl;
      }
public :
    int a;
};
class B
{
public :
	  B(int b_):a1(1),a2(2),c(0){//固定写死的1,2
	  	
	  }
      B(int b_,int m,int n):a1(m),a2(n),c(0)//灵活调用
	  {
            b=b_;
            cout<<"B的构造构"<<endl;
      }
      ~B(){
        cout<<"B的析构"<<b<<endl;
      }
public :
    int b;
    A a1;//内部类初始化
    A a2;
    const int a;//必须进行初始化
    
};

int main(){
   //A a(10);
    //A a2(20);
    //B b(1);
	B b1(1,2,3);

}

构造函数与析构函数的调用顺序

1)当类中有成员变量是其它类的对象时,首先调用成员变量的构造函数,调用顺序与声明顺序相同;之后调用自身类的构造函数

2)析构函数的调用顺序与对应的构造函数调用顺序相反

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值