C语言是面向过程的(函数);C++是基于面向对象的(类)。
面向对象的特征:抽象、封装、继承、多态
一、类的定义
class className
{
类的主体
};
class:类的关键字
className:类的名字
类的成员:类中的元素(变量、函数)
成员变量(类的属性):类中的数据
成员函数(类的方法):类中的函数
注:1.声明和定义全在类体中时,编译器会将其当成内联函数处理
2.声明在类体中,定义在类体外时(声明放在.h文件中,定义放在.cpp文件中),定义成员函数的时候,要在返回类型和函数名之间加上类名和作用域解析符( :: )
class CGoods
{
public:
void Register(char* name, int count, int price);
private:
char m_name[20];
int m_count;
int m_price;
int m_total_price;
};
///
void CGoods::Register(char* name, int count, int price)
{
strcpy(m_name, name);
m_count = count;
m_price = price;
m_total_price = m_count * m_price;
}
二、类的访问限定符及封装
C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用。
访问限定符:public、protected、private
注:1.public修饰的成员在类外可以直接被访问;
2.protected和private修饰的成员在类外不能直接被访问;
3.访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现为止;
4.class的默认访问权限为private,struct的默认访问权限为public
三、类的作用域
类定义了一个新的作用域,类的所有成员都在类的作用域中。在类外定义成员,需要使用::作用域解析符,来指明成员属于哪个类域。
四、类的实例化
概念:用类类型创建对象的过程,称为类的实例化。
注:定义出一个类并没有分配实际的内存空间来存储它。实例化出的对象才能实际存储数据,占用物理空间。
五、类对象的大小和存储方式
类对象中只保存成员变量,成员函数存放在公共的代码段不占用类的空间。一个类的大小,实际就是该类中成员变量所占空间大小(要遵循内存对齐规则)。
空类:类中什么都没有。(空类占1个字节)
六、this指针
this指针的原型:
struct CGoods
{
char name[20];
int count;
int price;
};
void InitGoods(CGoods* pt, char* name, int count, int price)
{
strcpy(pt->name, name);
pt->count = count;
pt->price = price;
}
int main()
{
CGoods c1, c2;
InitGoods(&c1, "C++", 10, 50);
return 0;
}
this指针是成员函数第一个隐含的指针形参,由编译器自动传递。
class CGoods
{
public:
// void Register(CGoods* const this, char* name, int count, int price)
void Register(char* name, int count, int price)
{
strcpy(m_name, name);//strcpy(this->m_name, name);
m_count = count;//this->m_count = count;
m_price = price;//this->m_price = price;
}
private:
char m_name[20];
int m_count;
int m_price;
};
int main()
{
CGoods c1, c2;
c1.Register("C++", 10, 58);//Register(&c1, "C++", 10, 58);
c1.Register("Java", 8, 50);//Register(&c2, "Java", 8, 50);
return 0;
}
注:1.this指针的类型:类类型* const
2.对象调用成员函数时,将对象地址作为实参传递给this形参
3.this指针是成员函数第一个隐含的指针形参,一般由编译器自动传递
识别类:
1.识别类名
2.识别数据成员
3.改写函数成员