1.声明类
用class
关键词进行声明
class Human{
string name;
int age;
void talk(string text);
};//注意这个地方有分号
2.对象
(1)创建对象
(2)使用句点运算符.
访问对象的属性
(3)使用指针运算符->
访问对象的属性,该对象是使用new进行实例化的
3.关键字public和private
可以通过这两个关键字来控制类中那些部分可以被从外部访问,那些不可以被从外部访问,因为外部无法访问private数据,所以可以实现数据抽象,示例代码如下:
#include<iostream>
using namespace std;
class Human//声明类
{
private://不得从外部访问
int age;
public://可以从外部访问
string name;
void introduceSelf(){//编写一个函数
cout<<"my name is "<<name<<endl;
cout<<"age is "<<age<<endl;
}
void setAge(int humanAge){
//因为age无法从外部访问,所以如果需要对其操作,只能从内部进行访问
age=humanAge;
}
//实现数据抽象,在真实身高上+10
void setHeight(int humanheight){
height=humanheight;
}
int getHeight(){
return (height+10);
}
};
int main(){
//正常创建
Human firstHuman;//创建对象
firstHuman.name="LiHua";//使用句点运算符访问对象
// firstHuman.age=20;
//如果如上行代码直接访问age会ERROR,因为是private参数
firstHuman.setAge(20);//只能通过调用类的函数去访问age
firstHuman.introduceSelf();
cout<<firstHuman.name<<endl;
// cout<<firstHuman.age<<endl;
//同理,上行代码也会报错
//使用new创建
Human* secondHuman=new Human();//动态分配
secondHuman->name="XiaoMing";//使用指针运算符访问属性
secondHuman->setAge(21);
cout<<secondHuman->name<<endl;
delete secondHuman;//因为有new所有要delete
//实现数据抽象
Human thirdHuman;
thirdHuman.name="LiSi";
thirdHuman.setHeight(170);
cout<<"LiSi height is "<<thirdHuman.getHeight()<<endl;
//实现了对外输出更高的身高
//而且一旦设置,外部也无法得知真实的身高
//因为height属于private数据
system("pause");
return 0;
}
4.构造函数
构造函数是特殊的函数,用于在创建对象时初始化对象的状态,如果类是设计图纸,则构造函数是按照图纸组装过程中的第一步。构造函数可在类声明的内外定义。
在类声明内部定义,代码如下:
class Human {
public:
string name;
int age;
Human(string n, int a) : name(n), age(a) {
//这里使用了内联函数,也可以不用
//code
}
};
在类声明外部定义,代码如下:
class Human {
public:
string name;
int age;
Human(string n, int a); // 声明而不定义
};
// 在类声明外部定义
Human::Human(string n, int a) {//使用了::作用域解析符
name = n;
age = a;
}
5.重载构造函数
代码示例如下,至于为什么要重载,优点参考(第七章)使用函数组织代码,示例代码如下:
#include<iostream>
#include<string>
using namespace std;
class Human
{
private:
string name;
int age;
public:
Human(){//构造函数并初始化
age=0;
name='a';
cout<<"default: "<<name<<" "<<age<<endl;
}
Human(string humanName,int humanAge){//重载构造函数
name=humanName;
age=humanAge;
cout<<"overload: "<<name<<" "<<age<<endl;
}
};
int main(){
Human firstMan;//默认
Human firstWoman("LiHua",20);//重载
system("pause");
return 0;
}
6.包含初始化列表的构造函数
初始化列表由包含在括号中的参数声明后面的冒号标识,冒号后面列出了各个成员变量和初始值
#include<iostream>
#include<string>
using namespace std;
class Human
{
private:
string name;
int age;
public:
Human(string humanName="LiHua",int humanAge=25):name(humanName),age(humanAge)
//上行代码就是初始化列表
{
cout<<"name: "<<name<<" age: "<<age<<endl;
}
};
int main(){
Human LiHua;//因为没有提供参数,所以使用的默认值
Human firstWoman("ZhangSan",20);
//提供了参数,所以赋值给了Human::name和Human::age
system("pause");
return 0;
}