码迷,mamicode.com
首页 > 其他好文 > 详细

类对象定义 一

时间:2019-11-16 23:33:57      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:cpp   public   space   类对象   传递   也会   setname   文件   头文件   

指针类型通过->来访问属性

类对象通过.来访问属性

类外定义

.h 定义声明类

#ifndef CPPDEMO_DUIXIANG_H
#define CPPDEMO_DUIXIANG_H

#include <string>
using namespace std;
/**
  类头文件
*/
class demo {
public:

    void setAge(int _age);
    int getAge();

    void setName(string _name);
    string getName();


private:
    string name;
    int age;
};


#endif //CPPDEMO_DUIXIANG_H

cpp实现定义头文件

#include "demo.h"
void demo::setAge(int _age) {
    age=_age;
}
void demo::setName(string _name) {
    name=_name;
}
int demo::getAge() {
    return age;
}
string demo::getName() {
    return name;
}

使用对象

#include <iostream>
#include <string>
#include "demo.h"

using namespace std;

int main() {
   demo m;
    m.setAge(12);
    m.setName("guolei");

    cout<<"年龄:"<<m.getAge()<<" 名字: "<<m.getName()<<endl;
    return 0;
}

构造函数

#include <iostream>

using namespace std;

class student {
public:
    student();
    student(string name);
    string getName();
private:
    string m_name;
};

string student::getName(){
    return m_name;
}
student::student(string name) {
    m_name=name;
}
student::student() {
    cout << "无参构造函数" <<  endl;
}

int main() {
    student *s= new student();//无参构造函数
    
    student *s2=new student("kitty2");//有参构造函数

    std::cout << "Hello, World!" << "name:"<< s->getName() <<std::endl;
    
    std::cout << "Hello, World!" << "name:"<< s2->getName() <<std::endl;

    return 0;
}

构造函数初始化列表

const 类型 只能通过 初始化列表来 初始化数据

#include <iostream>

using namespace std;

class student {
public:
/**
    student::student( string name): m_name(name)
    {
        cout << "初始化列表 " <<  endl;
    }
    上面的语法等同于如下语法:
    
    student::student( string name)
    {
        m_name = name;
    }
    
    假设有一个类 C,具有多个字段 X、Y、Z 等需要进行初始化,同理地,您可以使用上面的语法,只需要在不同的    字段使用逗号进行分隔,如下所示:
    
    C::C( double a, double b, double c): X(a), Y(b), Z(c)
    {
        ....
    }
    
 */
    student():m_name("kittyg"),age(20){} //初始化列表 初始化字段
    
    student(string name);//带参构造函数
    
    string getName();
    
    int getAge();
private:
    string m_name;
    
    int age;
};


int main() {
    student *s= new student();
    
    student *s2=new student("kitty2");

    std::cout << "Hello, World!" << "name:"<< s->getName() <<" age:"<<s->getAge()<<std::endl;
    
    std::cout << "Hello, World!" << "name:"<< s2->getName() <<std::endl;

    return 0;
}
string student::getName(){
    return m_name;
}
student::student(string name) {
    m_name=name;
}
int student::getAge() {
    return age;
}

拷贝构造函数

定义格式: 类名(const类名&变量名)
如果没有自定义拷贝构造函数则自动生成一个默认的拷贝构造函数
当采用直接初始化或复制初始化实例化对象时,自动调用拷贝构造函数

#include <iostream>

using namespace std;
//.h
class student {
public:
    student():m_name("kittyg"),age(20){}//列表初始化字段
    student(string name);
    student(const student &stu);//拷贝构造函数
    string getName();
    int getAge();
private:
    string m_name;
    int age;
};

//cpp
string student::getName(){
    return m_name;
}
student::student(string name) {
    m_name=name;
}
int student::getAge() {
    return age;
}

student::student(const student &stu) { //实现拷贝构造函数
    cout<<"keo bei"<<endl;
}
//测试函数
void test(student s){

}
int main() {
    student s;
    student *s2=new student("kitty2");
    student s3=s;
    test(s3); //函数传递对象的时候 也会触发 拷贝构造函数

    std::cout << "Hello, World!" << "name:"<< s.getName() <<" age:"<<s.getAge()<<std::endl;

    std::cout << "Hello, World!" << "name:"<< s2->getName() <<std::endl;

    return 0;
}

析构函数

主要用于善后处理,一般用于释放内存
如果没有自定义析构函数则自动生成
析构函数在对象销毁时自动调用
析构函数没有返回值,没有参数也不能重载

对象的生命历程

申请内存->初始化列表->构造函数->参与运算或执行逻辑->析构函数->释放内存

#include <iostream>

using namespace std;
//.h
class student {
public:
    student();
    student(string name);
    student(const student &stu);//拷贝构造函数
    ~student();//析构构造函数
    string getName();
private:
    string m_name;
};

//cpp
student::student() {}
string student::getName(){
    return m_name;
}
student::student(string name) {
    m_name=name;
}
student::student(const student &stu) {
    cout<<"keo bei"<<endl;
}
student::~student() {
    cout<<"xi gou"<<endl;
}

void test(student s){

}
int main() {
    student s;
    student *s2=new student("kitty2");
    
    std::cout << "Hello, World!" << "name:"<< s2->getName() <<std::endl;

    delete  s2;// 触发析构函数

    return 0;
}

类对象定义 一

标签:cpp   public   space   类对象   传递   也会   setname   文件   头文件   

原文地址:https://www.cnblogs.com/wuyanzu/p/11874383.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!