内容
class 类名{
1.构造函数(构造函数生成对象)
类型:(a.默认构造无参 b.普通构造自己定义的有参 c.拷贝构造 参为另一个对象 引用)
特点:(无返回值)(函数名与类名相同)
2.析构函数~(无参)(在销毁对象时调用的函数 释放内存资源)
3. public private(只能在类的内部函数调用 mian不能调用)
4.数据成员
5.成员函数(工具函数 get读 set写 获取private类型的数据 因为在类外不能用private数据 所以在类外调用工具函数用private)(行为函数 )
}
指针比较是否相等不能直接用==(因为是浅拷贝 拷贝的只是地址)要进行运算符重载(深拷贝)
一个示例
#include <iostream>
using namespace std;
class Person {
public://构造函数
Person() { //默认构造函数
m_name = new char[1];
*m_name = '\0';
m_age = 0;
m_sex = 'M';
m_height = 0.0f;
m_weight = 0.0f;
cout << "Person() called " <<m_name << endl;
};
Person(const char* name, int age, char sex, float height, float weight);//普通构造函数
Person( Person &p) {//拷贝构造函数//const Person &p
m_name = new char[strlen(p.m_name)+1];
strcpy_s(m_name, strlen(p.m_name) + 1,p.m_name);
m_age = p.m_age;
m_sex = p.m_sex;
m_height = p.m_height;
m_weight = p.m_weight;
cout << "Person( Person &p) called " << m_name << endl;
}
~Person(){//析构函数
cout << "~person called "<<m_name<<endl;
}
public://工具函数
char* getname() {
return m_name;
}
void setname(char *name) {
if (name == NULL) {
m_name = new char[1];
*m_name = '\0';
}
else {
m_name = new char[strlen(name)+1];
strcpy_s(m_name, strlen(name) + 1,name);
}
}
public://操作运算符重载
bool operator <(Person &p) {
//年龄为标准
return m_age < p.m_age;
}
bool operator ==(Person &p) {
//年龄和姓名
return m_age == p.m_age && strcmp(m_name,p.m_name) == 0;
}
void operator =(Person &p) {
if (m_name) {
delete[]m_name;
}
//深拷贝
m_name = new char[(strlen(p.m_name)+1)];
strcpy_s(m_name,strlen(p.m_name) + 1,p.m_name);
m_age = p.m_age;
m_height = p.m_height;
m_sex = p.m_sex;
m_weight = p.m_weight;
cout << "operator =(Person &p) " << m_name << endl;
}
private://数据成员
char *m_name;
int m_age;
char m_sex;
float m_height;
float m_weight;
public://行为
void eat() {
cout <<m_name<< " is eating!!!" << endl;
}
bool ishealth() {
float bmi = m_weight / (m_height*m_height);
return bmi <= 25.0f && bmi >= 20.0f;
}
};
Person::Person(const char* name, int age, char sex, float height, float weight) {
m_name = new char[strlen(name)+1];
strcpy_s(m_name, strlen(name) + 1,name);
m_age = age;
m_sex = sex;
m_height = height;
m_weight = weight;
cout << "Person(char* name, int age, char sex, float height, float weight) called " << m_name << endl;
}
int main()
{
Person a;
Person b("asd",13,'M',1.82,60.1);
Person c("vrt", 20, 'W', 1.62, 49.0);
Person d = c;
a = b;
if (c.ishealth()) {
c.eat();
}
else
cout << "no eating !!!" << endl;
}