C++类的基础

类的基本形式

C++的类是其面向对象编程思想的基石,类比C语言中的结构体,C++的类是一个对象相关属性的合集,比如一个对象是学生,那么他的身高,性别,性格,行为(函数)都可以作为他的属性。

class Student
{
public//类外可见
	string name;
	int height;
	string character;
	void behaviour()
	{
	}
};//不要漏掉分号

关于类的声明方式,有栈区普通对象以及堆区指针对象的方式,示例代码如下:

	Student Xiaoming;
	Xiaoming.name = "Xiaoming";
	Xiaoming.height = 175;
	Xiaoming.character = "introverted"
	Xiaoming.behaviour();

	Student *Xiaohua = new Student;
	Xiaohua->name = "Xiaohua";
	Xiaohua->height = 180;
	Xiaohua->character = "extroverted"
	Xiaohua->behaviour();

除了static类型的成员,必须通过对象的方法才能访问或调用。

访问修饰符

public:类外可见,结构体默认为该类型。
private:仅类内可见,类默认为该类型,若要改变则需单独声明修饰符。
protected:类及子类可见。
示例代码如下:

#include <iostream>
#include <cstring>

using namespace std;

class Cpeople
{
public://类外可见
    int a;

private://只对该类可见
    int b;

protected://类及子类可见
    void fun_C(int s)
    {
        b = s;
        cout << b << endl;
    }
};

class Xiaoming : public Cpeople //子类继承
{
public:
    void fun_X(int a)
    {
        fun_C(a);
    }
};

int main()
{
    Cpeople stu;
    stu.a = 1;
    //stu.b = 1; 私有成员不允许类外访问
    //stu.fun_C(2); 受保护成员不允许类及子类外访问

    Xiaoming stu2;
    stu2.fun_X(5); //通过子类调用受保护函数protect。
    
    return 0;
}

运行结果:
在这里插入图片描述
至此,三种访问修饰符介绍完毕。

友元函数

笔者不建议在实际应用中滥用友元函数,这样会破坏C++的封装性,不过同C语言的goto一样,见仁见智。
友元的作用一言以蔽之,使对象中的私有成员对类外可用。常见写法:

class Stu
{
private:
	int a;
	void fun_Stu()
	{}
	friend void fun(); //友元声明方式
}

void fun()
{
	Stu c1;
	c1.fun_Stu(); 
}

int main()
{
	fun(); //此时运行,可以成功调用fun_Stu,但注意,此时仅仅对fun()可见,对main仍然不可见。
	return 0;
}

友元类的声明方式与函数类似。
注意事项:

  1. 对于private和protected成员,可以通过友元使之对外可见。相当于public。
  2. 对于protected成员,除了通过友元对外可见,还可以通过子类继承的方式对外可见。
  3. 对于一个类,可以有多个友元,可以是类,函数等。
  4. 破坏了封装性,谨慎使用。

额外内容:类嵌套

class A
{
public:
	class B
	{};
};

A称为外部类,B称为内部类。
B不能直接访问A的成员,可以有两种做法去实现,一是在内部类创建一个外部类对象(新创建的类,与原类不属于同一个内存空间),二是定义一个外部类指针,通过构造函数初始化指针。
A访问B的成员直接在类内创建对象调用便可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值