一.类和成员变量
用class代表一个类
其他说明均在代码中
#include<stdio.h>
#include<string.h>
class object//class原理上和struct相同
{
public:
int a;
int b;
double c;
double d;
};
//访问修饰符:public private。每个成员变量只受最近的前面一个修饰符限制
int main()
{
object obj = {1,2,3,4};
printf("%d-%d-%.2f-%.2f\n",obj.a,obj.b,obj.c,obj.d);
object* p = &obj;//指针类型 .111
printf("%d-%d-%.2f-%.2f",p->a,p->b,p->c,p->d);
return 0;
}
二.成员函数和this指针
定义在 class内的函数 同样可以被修饰符修饰
引入this指针:我们要想在test中调用到x,y
#include<stdio.h>
#include<string.h>
class object
{
private:
int x;
int y;
// 第一种办法
// void test(object* that)
// {
// printf("a = %d,b = %d\n",that->a,that->b);
// }
public:
//第二种办法:引入this
void set(int a,int b)
{
this->x= a;
this->y= b;
}
void test()
{
printf("a = %d,b = %d\n",this->x,this->y);
}
int add()
{
return this->x + this->y;//可以理解为
}
};
int main()
{
object obj;
obj.set(10,20);
obj.test();
;
return 0;
}
三.重名问题
this->其实可以省略。编译器会自动给它加上
重名问题:就近原则
(1)当局部变和成员变量重名时,该变量指向的是局部变量。 如果要指定成员变量需要加this->
class object
{
public:
int a;
void test(int a)
{
printf("%d\n",a);
}
};
(2)在成员函数里,当成员变量和全局变量同名时,指向的是成员变量 如果要指向全局变量要加上 :: a
int a;
class object
{
public:
int a;
void test(int)
{
printf("%d\n",a);
}
};
(3)在成员函数和全局函数重名时,指向的是局部变量 如果想指向全局函数加上 :: 符号
四.类的封装
把函数内部隐藏起来,只展示函数的接口
将成员变量设置成private
#include<stdio.h>
class Circle
{
public:
int GetX()
{
return m_x;
}
int GetY()
{
return m_y;
}
void MoveTo(int x,int y)
{
m_x = x;
m_y = y;
}
void SetRadius(int radius)
{
m_radius = radius;
}
double Area()
{
return 3.14*m_radius*m_radius;
}
private:
int m_x;//x坐标
int m_y;//y坐标
int m_radius;
} ;
int main()
{
Circle obj;
obj.SetRadius(3);
printf("Area = %.2f",obj.Area()) ;
return 0;
}
五.class的头文件和源文件的分离
将class的成员函数的定义放到class外面
//Object.h
#ifndef __OBJECT_H
#define __OBJECT_H
class Object
{
public:
int x;
void test();
};
#endif
保护宏的命名规则
每个头文件中保护宏的名字应当不同。如果相同,则具有相同保护宏的头文件不能被同一个C文件包含。因此,需要制定保护宏的命名规则,其规则如下:
1.以文件名为基础构建宏名,比如示例文件名为“object.h”
2.将文件名中的“.”转换成“”,成为“object_h”
3.全部字符转换成大写,成为“OBJECT_H”
4.最后在前面添加两个“”,成为完整的保护宏“__OBJECT_H”
//Object.cpp
#include<stdio.h>
#include"Object.h"
void Object::test()
{
printf(" x = %d\n",x);
}
#include<stdio.h>
#include<string.h>
#include"Object.h"
int main()
{
Object obj;
obj.x =111;
obj.test();
return 0;
}