类和对象、内联函数、重载

1.C++类和对象

类与结构体一样,有相似之处,从今天开始学习。加油。

1.1类的声明与对象的创建

声明

class Student{
    public:
        char *name;
        int age;
    public:
        void print(){
            printf("%s--%d",name,age);
        }
    protected:
    private:
};

创建

    Student stu1;
    stu1.name="Wendy";
    stu1.age=25;
    stu1.print();

完整示例

#include "iostream"
#include "vector"
#include "string"
using namespace std;

int main(){
    class Student{
    public:
        char *name;
        int age;
    public:
        void print(){
            printf("%s--%d",name,age);
        }
    protected:
    private:
    };
    Student stu1;
    stu1.name="Wendy";
    stu1.age=25;
    stu1.print();
    return 0;
}

1.2类的成员变量和成员函数

在定义类的时候不能对成员赋值,类是一种数据类型,不占用内存,而变量的值需要内存来存储。

类本身不占内存,但是经过类声明一个对象,假设是空的,会占据内存哦,请看:

class aaa{
private:
public:
};

int main() {
    aaa b;
    cout << sizeof(b);
}

这里写图片描述

相关解释在geeksforgeeks有,不再赘述,参考我的博客即可

方式1-类内部定义成员及函数

    class Student{
    public:
        char *name;
        int age;
    public:
        void print(){
            printf("%s--%d",name,age);
        }
    protected:
    private:
    };

方式2-类内部定义成员外部定义函数

class Student{
public:
    char *name;
    int age;
public:
    void print();
protected:
private:
};

void Student::print(){
    printf("%s--%d",name,age);
}

inline 内联函数

在类内和类外定义函数是有区别的,类之内定义为内联成员,之外定义不是。

首先,在类之内定义的函数默认为内联函数,而在之外如果需要变成内联函数,可以在之前加入inline关键字

记好,所谓定义是指后面写了大括号
void print(){}
而声明仅仅是 void print();

class Student{
public:
    char *name;
    int age;
public:
    inline void print();
protected:
private:
};

void Student::print(){
    printf("%s--%d",name,age);
}

这样子,即使函数在类之外定义,print()也成为内联函数

1.3类成员的访问权限

C++通过public、protected、private三个关键字控制成员变量和成员函数的访问权限。

在类之内定义,都是可以互相访问,没有限制

在类之外定义无法访问private和protected属性的成员变量和成员函数,仅仅可以访问public属性的成员变量和成员函数。

代码块

#include "iostream"
#include "vector"
#include "string"
#include "queue"
#include "algorithm"
#include "unordered_map"
#include "stack"

using namespace std;

class student{
public:
    void setname(char *name1){
        name=name1;
    }

    void setage(int age1){
        age=age1;
    }

    void setscore(float score1) {
        score=score1;
    }

    void say(){
        printf("%s--%d--%f",name,age,score);
    }
protected:
private:
    char *name;
    int age;
    float score;
};

int main(){
    student s1;
    s1.setname("wer");
    s1.setage(43);
    s1.setscore(33.9);
    s1.say();

    return 0;
}

1.4成员函数的重载及参数缺省

C++函数可以设置缺省值,设置之后,函数调用的时候可以忽略。但是一旦设置之后,后面的参数也必须设置为缺省值。

#include "iostream"
#include "algorithm"
using namespace std;

int sum(int x=0,int y=100,int z=0){
    return x+y+z;
}

int main(){
    cout<<sum()<<endl;
    cout<<sum(6)<<endl;
    cout<<sum(6,10)<<endl;
    cout<<sum(6,10,20)<<endl;

    return 0;
}

这里写图片描述

重载:重载时指两函数具有相同的函数名,但其中参数的类型或者个数不同,进行再定义,他们仍然是不同的函数。

#include "iostream"
#include "algorithm"
using namespace std;


class Location{
public:
    void init(int x=0,int y=0);

    void valueX(int val){
        x=val;
    }

    int valueX(){
        return x;
    }
protected:
private:
    int x,y;
};

void Location::init(int a,int b){
    x=a;y=b;
}

int main(){
    Location A;
    A.init(99);
    A.valueX(6);
    cout<<A.valueX()<<endl;
}

输出:
6

但是,要注意使用函数缺省值时候避免函数重载的二义性

举例:

#include "iostream"
#include "algorithm"
using namespace std;


class Location{
public:
    void init(int x=0,int y=0);

    void valueX(int val=0){
        x=val;
    }

    int valueX(){
        return x;
    }
protected:
private:
    int x,y;
};

void Location::init(int a,int b){
    x=a;y=b;
}

int main(){
    Location A;
    A.init(99);
    A.valueX(6);
    cout<<A.valueX()<<endl;
}

编译出错

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值