C++:面向对象(OOP)
1、类的三特点:封装,继承,多态
2、类:就是某一类事物的模板描述
属性:实物的特征的描述
方法:某一类实物的功能的描述
C++类的定义:
class 类型名
{
属性
方法
};
对象:某一个类事物的具体实例。
对象的组成:属性(就是一个实物的特征),方法(事物具有的功能)
注:一个类属于所有人该类的实物,一个实物只能属于一个类
class 的构造函数的自定义,公有属性,私有属性,保护属性,定义一个函数接口,用于外部可以获得私有属性的内容,但不允许进行修改操作.
#include<iostream>
#include<string.h>
using namespace std;
//定义类:(结构体)描述某一类实物的模板 (在草稿纸上画了某系车)
class people
{
//属性
public:
int id;
char name[10];
protected:
short age;
private:
int rmb;
//方法
public:
//默认构造函数
people()
{
cout<<"对象生成,空间开始"<<endl;
//初始化空间值
id=0;
strcpy(name,"nul");
rmb=0;
age=0;
}
//重载构造函数-同名函数
people(char* n,int i,short a,int r)
{
cout<<"对象生成,空间开始(有参构造)"<<endl;
strcpy(name,n);
id=i;
age=a;
rmb=r;
}
public:
void show()
{
cout<<"调用show方法"<<endl;
}
};
//定义结构体:定义新的类型
struct student//学生
{
//属性
int id; //公开
char name[10];//公开
short age; //隐私
};
int main()
{
//实例化对象:
people lm;//lm调用构造函数---必有构造函数
cout<<lm.id<<endl;
cout<<lm.name<<endl;
//cout<<age<<endl; 受保护
people lz("lz",1002,3,500);//实例化--构造函数
cout<<lz.name<<endl;
cout<<lz.id<<endl;
/*
//定义变量:类型 变量名;
struct student s={1001,"lm",18},wb;
//引用姓名
cout<<s.name<<endl;
//不希望外界知道s的年龄 we年龄
cout<<s.age<<endl;//引用温室的年龄
//引用属性
wb.age=28;//赋值
cout<<wb.age<<endl;
*/
//对象:某一类的具体实例化
//people lm={1001,"liumiao",18,100};//只能由构造函数
//people lm;
//姓名
//cout<<lm.name<<endl; //name可以外界访问:公有
//ID
//cout<<zhl.id<<endl; //ID可以外界访问:公有
//age
//cout<<tzw.age<<endl; //保护不能外界访问
//lq
//cout<<lq.rmb<<endl; //私有不能外界访问
//方法:向一个对象发送消息
//lm.show();
//求对象的空间---lm分配的数据空间()
//cout<< sizeof(lm)<<endl;
}
实现,定义一个函数,进行访问私有属性.
#include<iostream>
#include<string.h>
using namespace std;
//类:一类事物的模板
class student
{
public:
//方法
student();//无参构造函数
student(int,char*,char,int );//有参构造函数
//属性
int id;
char name[10];
char sex;
public:
short getAge();//提供公有接口---访问非公有数据
void setAge(int);//提供公有接口---访问修改内容
protected:
short age;//受保护
};
//类外定义函数---构造函数
student::student():id(0),sex('m'),age(0)
{
cout<<"无参构造函数"<<endl;
//id=0;
//sex='m';
strcpy(name,"nul");
}
student::student(int i,char* n,char s,int a):id(i),sex(s),age(a)
{
cout<<"参构造函数"<<endl;
//this->id=i; 等价
//this->name=n;
strcpy(this->name,n);
}
//接口:
short student::getAge()
{
return age;//age是protected类外不能访问,类内可以访问
}
void student::setAge(int age)
{
cout<<"1---"<<age<<endl;//局部变量优先
cout<<"2---"<<student::age<<endl;
//student::age=age;
this->age=age;
}
int main()
{
//对象的实例化:
/*
student lm; //分配空间---构造方法(student(void))
cout<<sizeof(lm)<<endl;
cout<<&lm<<endl;//输出地址
//引用成员:向对象发送消息 对象.成员 地址->成员
cout<< lm.id <<endl;
//定义对象指针变量:
student* ps=&lm;
//通过指针引用内容:
cout<<ps->id<<endl;
//cout<<ps->age<<endl;
cout<<ps->getAge()<<endl;
//ps->setAge(18);
lm.setAge(18);
cout<<"----"<<ps->getAge()<<endl;
*/
student tzw(1001,"tzw",'m',19);//调用无参构造函数
cout<<tzw.id<<endl;
//cout<<tzw.age<<endl;
cout<<tzw.getAge()<<endl;
}