C++类和对象小结

学习目标:

提示:这里可以添加学习目标

掌握C++类的使用


学习内容:

1.什么是类
C中结构体的增强版,可以有成员函数,可以重载,C中结构体可看作所有数据成员访问权限都为public的类;
2.类的定义
用关键字class开头;

class A{
	int a;//private
	public:
		char b;
	protected:
		double c;
	private:
		char d;
}

3.定义类的对象
类似C,

A cl_1;
A cl_2;

4.访问访问权限为public的数据成员

#include<iostream>

class square{
	public: 
    int length,width;
};
using namespace std;
int main()
{
	square square_1;
	square_1.length =3;
	square_1.width = 2;
    int c =square_1.length*square_1.width;
	cout<< c <<endl;
	return 0;
}

5.类的成员函数

class square{
	public: 
    int length,width;
    int s()
    {
    	return length*width;
    }
};
//or
//class square{
//	public: 
 //   int length,width;
  //  int s();
//};
//inline int square::s(){//::作用域符号
//    return length*width;
//    }
int main()
{
	square square_1;
	square_1.length =3;
	square_1.width = 2;
    //int c =square_1.length*square_1.width;
	cout<< square_1.s() <<endl;
	return 0;
}

6.类的访问修饰符
public,
public的成员是在类的外部仍可进行访问的,在类的外部可以不使用任何成员函数来给成员赋值。
private的成员变量或函数在类的外面是无法访问的,甚至无法查看,只有类和友元可以访问私有成员。
protected的成员变量和函数与private的成员类似,但protected的成员在派生类/子类中是可以访问的
如果类中的成员没有声明访问权限,默认权限是private的。
继承中的特点
在这里插入图片描述
7.构造函数和析构函数
构造函数:类的构造函数是类的一种特殊的函数,这个函数会在每次创建类的新对象时进行调用,构造函数的名称和类是完全相同的,并且函数在调用的时候不会返回任何类型,也不会返回void,可用于为某些成员变量设初始值,类的构造函数如果我们不明确写是不会出现在类中的,

class A{
    private:
        int length,width,cnt;
    public:
        A();//构造函数
        void s(int l,int w);
}

A :: A(){
    printf("this obj is being created!\n");
}
//or
A :: A(int c){
	cnt = c;
    printf("this obj is being created!\n");
}
//or,这上下两个等价
A :: A(int c):cnt(c){
    printf("this obj is being created!\n");
}
void A::s()
{
    length = l;
    width =w;
    printf("%d\n",width*length);
}
int main(int argc, char const *argv[])
{
    int l=2,w=3;
    A A_1;
    A_1.s(l,w);
    return 0;
}

初始化多个变量:

Class :: Class(int a,int b,int c):object1(a),object2(b),object3(c){
...
}

析构函数:
类的析构函数是类的一种特殊成员函数,他会在每个删除所创建的对象的时候会调用这个函数,析构函数的名称和类的名称是完全相同的,只是这个函数名前面加‘~’作为前缀,和构造函数一样,这个函数不会返回任何值,也不能带任何参数,析构函数有助于跳出程序(关闭文件,释放内存)前释放资源。

class A{
    private:
        int length,width,cnt;
    public:
        A();//构造函数
        void s(int l,int w);
        ~A();//析构函数
}

A :: A(){
    printf("this obj is being created!\n");
}
//or
A :: A(int c){
	cnt = c;
    printf("this obj is being created!\n");
}
//or,这上下两个等价
A :: A(int c):cnt(c){
    printf("this obj is being created!\n");
}
A :: ~A(){
	printf("this obj is being deleted!\n");
}
void A::s()
{
    length = l;
    width =w;
    printf("%d\n",width*length);
}
int main(int argc, char const *argv[])
{
    int l=2,w=3;
    A A_1;
    A_1.s(l,w);
    return 0;
}

每个对象调用析构函数的时候,顺序和定义是相反的,构造函数和析构函数调用顺序如下:
class obj1,obj2,obj3;
class 1 2 3,~class 3 2 1;
8.拷贝构造函数
类的拷贝时使用;
9.友元函数
C++中类对对象进行封装,但如想访问封装的数据成员需要用到友元函数。类的友元函数是定义在类的外部,但是有权访问类中的private和protected成员,尽管友元函数在类的定义中出现过,但友元函数不是类的成员函数。
要声明函数为一个类的友元,需要在类的定义中这个函数原型前使用关键字friend,

class A{
    private:
        int length,width;
    public:
        A();//构造函数
        friend void s(int l,int w);//友元函数
        ~A();//析构函数
}
void s(int l,int w){
length=l;
width=w;
printf("%d",length*width);}

10.内联函数
在类中定义的函数都是内联函数,即使没使用inline关键字。
11.this指针
在C++中每一个对象都能通过this指针访问自己的地址,this指针是所有成员函数的隐含参数,因此在成员函数的内部,this指针可以用来指向调用的对象,但友元函数是没有this指针的,因为它不是类的成员函数。只有成员函数才有this指针

class A{
    private:
        int length,width;
        int res;
    public:
        A();//构造函数
        friend void s(int l,int w);//友元函数
        bool compare(A this_s);
        ~A();//析构函数
}

A :: A(){
    printf("this obj is being created!\n");
}
void A::s()
{
    length = l;
    width =w;
    res = width*length;
    printf("%d\n",width*length);
}
bool A::s(A this_s)
{
    if(this->res >this_s.res)return 1;
    return 0;
}
int main(int argc, char const *argv[])
{
    int l=2,w=3,x=4,z=2;
    A A_1,A_2;
    A_1.s(l,w);
    A_2.s(x,z);
    if(A_1.compare(A_2)){
        printf("The frist box is larger than the second box");
    }
    else{
        printf("The first box is equal or smaller than the second box");
    }
    return 0;
}

12.指向类的指针
一个指向类的指针和指向结构的指针类似,访问指向类的指针的成员通常需要运算符->和访问指向结构的指针一样,在使用指针前需要初始化。

A *p;
p=&A_1;
p->s();

13.类的静态成员
假如我们需要一个变量统计创建的对象数量,这个变量在每个对象中是公共的,都可修改和使用,值不因对象的删除和改变而改变,这就要用到静态成员。
使用static关键字把成员定义为静态的,不能把静态成员初始化放在类的定义里,要在类外声明从而初始化。

class A{
    private:
        int length,width;
        static int res;
    public:
        A();//构造函数
        friend void s(int l,int w);//友元函数
        bool compare(A this_s);
        ~A();//析构函数
}

int A :: res = 0;

学习时间:

  • 周2上午 9 点-上午 6 点

学习产出:

CSDN 技术博客 1 篇

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值