类对象定义 一

Posted wuyanzu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类对象定义 一相关的知识,希望对你有一定的参考价值。

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

类对象通过.来访问属性

类外定义

.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;
}

以上是关于类对象定义 一的主要内容,如果未能解决你的问题,请参考以下文章

Java中面向对象的三大特性之封装

如何通过单击适配器类中代码的项目中的删除按钮来删除列表视图中的项目后重新加载片段?

Java 封装

Java 封装

Java 封装

Java 封装