语句:数据+函数
C++中增加了对象
面向对象的三大特征:封装、继承、多态
面向对象的四大特征:抽象、封装、继承、多态
C实现封装:
#include<iostream>
#include<stdio.h>
using namespace std;
struct Cgoods
{
char*_name;
int _price;
void (*init)(struct Cgoods *good , char * name,int price);
void (*copy)(struct Cgoods const* des,struct Cgoods* src);
struct Cgoods (*assign)(struct Cgoods const* des,struct Cgoods* src);
void (*destory)(struct Cgoods*good);
int (*sell)(struct Cgoods const* des);
};
void init(struct Cgoods *good , char *name , int price)
{
if (NULL== good || NULL==name)
{
return;
}
good->_name=new char[strlen(name)];
strncpy(good->_name,name,strlen(name)+1);
good->_price=price;
}
void copy(struct Cgoods const* src,struct Cgoods* des)
{
if(NULL==src || NULL==des)
{
return;
}
des->_name=new char[strlen(src->_name)+1];//申请空间
strncpy(des->_name, src->_name, strlen(src->_name)+1); //拷贝数据
}
struct Cgoods assign(struct Cgoods const* des,struct Cgoods* src)
{
if(NULL==src || NULL==des)
{
return;
}
des->_name=new char[strlen(src->_name)+1];//申请空间
strncpy(des->_name, src->_name, strlen(src->_name)+1); //拷贝数据
des->_price=src->_price;
}
void destory(struct Cgoods*good)
{
if(NULL!=good&&NULL!=good->name)
{
delete[]good->_name;
good->_name=NULL;
}
}
int sell(struct Cgoods const* des)
{
if(NULL!=des)
{
cout<<"price:"<<endl;
}
}
/*
struct Cgoods a;
struct Cgoods b=a; //拷贝构造
a=b; //赋值
*/
int main()
{
struct Cgoods goodl;
goodl.sell =sell;
goodl.assign =assign ;
goodl.copy=copy;
goodl .init =init ;
goodl.destory=destory;
}
C++封装:
class中有两种成员:成员方法、成员属性
其中成员方法不占空间
构造函数:
构造函数在对象进行实例化时会自动调用
如果没有自实现构造函数,系统会生成一个默认的构造函数。如果自实现,系统不会自动生成。
默认构造函数没有参数,函数体为空
构造函数没有返回值,函数名和类名一致
析构函数:
析构函数是在对象被销毁是自动调用的成员方法
如果没有自实现析构函数,系统会生成一个默认的析构函数。如果自实现,系统不会自动生成。
默认的析构函数没有函数体
析构函数没有返回值,没有参数,函数名为:~类名
👀
用一个对象初始化另一个对象——拷贝构造
拷贝构造函数:
用已存在的对象初始化新产生的对象的时候会自动调用拷贝构造函数
如果没有拷贝构造函数,系统会默认生成一个拷贝构造函数。如果自实现,系统不会自动生成。
默认的拷贝构造函数会进行值拷贝(浅拷贝)
拷贝构造函数没有返回值,参数是对象类型的引用(防止循环拷贝,造成死递归)
this指针:
调用的对象的指针
在每一个普通的成员方法的第一个参数 默认就是this指针
this不用手动传递和手动写形参,系统会默认形成形参和默认传参
普通成员方法中每一个成员属性前面都会默认加上this指针的解引用
🐱🐉
class Cgoods
{
char *_name;
int _price;
Cgoods()
}