《21天学通C++》(第九章)类和对象(1)

发布于:2024-04-21 ⋅ 阅读:(163) ⋅ 点赞:(0)

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;
}

网站公告

今日签到

点亮在社区的每一天
去签到