类对象定义 一
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;
}
以上是关于类对象定义 一的主要内容,如果未能解决你的问题,请参考以下文章