C++基础---类(class)

1. 类(class)

1.1 类的概念

  • **类(class):**是面向对象程序设计中的概念,是面向对象编程的基础,是对对象的抽象,对象是对客观事物的抽象。
  • **类(class):**是一种抽象的数据类型,是一种复合数据类型,类类型。
  • **类的构成:**包括成员变量成员函数
  • 类(class):是对现实生活中一类具有共同特征的事物的抽象。如果一个程序里提供的类型与应用中的概念有直接的对应,这个程序就会更容易理解,也更容易修改。一组经过很好选择的用户定义的类会使程序更简洁。此外,它还能使各种形式的代码分析更容易进行。特别地,它还会使编译器有可能检查对象的非法使用。
    注:在面向对象程序设计中,程序员不需要考虑数据结构和操作函数,只需要考虑对象即可。

1.2 类的声明

  • 类的声明(declare),称为前向声明(forward declaration),在程序中引入了类类型的类名,基本型式如下:

    class 类名;
    
  • 注意事项:
    (1)在类声明之后,定义之前,类是一不完全类型,即已知其实个类型,但是不知道它的成员。
    (2)不完全类型只能用于定义指向该类型的指针和引用,或者用于声明使用该类型作为形参类型或者返回类型的函数。

    返回类型 函数名(类名 &对象);
    返回类型 函数名(类名 *对象);
    
  • 代码示例:

    #include <iostream>
    #include <string>
    using namespace std;
    
    class B;
    class A
    {
    public:
    	A(){}
    	~A(){}
    public:
    	void set_name(B &ptr_B, string name);
    	string get_name(B *ptr_B);
    };
    
    class B
    {
    public:
    	B() : _name("class B"){}
    	~B(){}
    public:
    	void set_name(string name){_name = name;}
    	string get_name(){return _name;}
    private:
    	string _name;
    };
    
    void A::set_name(B &ptr_B, string name)
    {
    	ptr_B.set_name(name);
    }
    
    string A::get_name(B *ptr_B)
    {
    	cout<<ptr_B->get_name()<<endl;
    	return ptr_B->get_name();
    }
    
    int main(int argc, char *argv[])
    {
    	B b;
    	A a;
    	a.set_name(b, "向前声明class B");
    	a.get_name(&b);
    	system("pause");
    	return 0;
    }
    =>向前声明class B
    

1.3 类的定义

  • 类的定义(define), 在创建类的对象之前,必须完整的定义该类,而不只是声明类,基本型式如下:

    class 类名
    {
    public:
    	公有成员
    private:
    	私有成员
    protected:
    	保护成员
    };
    
  • 注意事项:
    **(1)类名:**遵循一般的命名规则,字母,数字和下划线组合,不要以数字开头。
    (2)访问限制: public,private,protected为访问限制关键字。
    **(2)类成员:**类可以没有成员,也可以定义多个成员。成员可以是数据、函数或类型别名。所有的成员都必须在类的内部声明。没有成员的类是空类,空类也占用空间。如:
    class People{};
    sizeof(People) = 1;
    **(3)成员变量:**成员变量必须在类内部定义,可以在类内部或类外部进行初始化。不能使用 auto、extern和register等进行修饰,也不能在定义时进行初始化。
    **(4)成员函数:**成员函数必须在类内部声明,可以在类内部定义,也可以在类外部定义。如果在类内部定义,就默认是内联函数。可以有多个重载成员函数,个数不限。
    **(5)构造与析构函数:**构造函数是一个特殊的、与类同名的成员函数,用于给每个数据成员设置适当的初始值。析构函数是一个特殊的、与类同名(只是在函数名前面加一个位取反符~)的成员函数,用来做“清理善后” 的工作。
    **(6)结尾部分的分号:**必不可少,否则会发生编译错误。
    (7)类不能具有自身类型的数据成员,但可以包含指向本类的指针或引用。

    class ListNode
    {
    public:
    	int num;
    	ListNode *next;
    }; 
    
  • 代码示例:

    #include <iostream>
    #include <string>
    using namespace std;
    
    class ListNode
    {
    public:
    	string name;
    	int num;
    	ListNode *next;
    }; 
    
    int main(int argc, char *argv[])
    {
    	ListNode x, y, z, *head, *p;
        x.name = "123"; x.num = 1; 
        y.name = "456"; y.num = 4; 
        z.name = "789"; z.num = 7; 
        head = &x;
        x.next = &y;
        y.next = &z;
        z.next = NULL;
        p = head;
        while(p)
        {
            cout<<p->name<<"\t"<<p->num<<endl;
            p = p->next;
        }
    	system("pause");
    	return 0;
    }
    =>123 1
      456 4
      789 7
    

**参考文献: **
[1]《C++全方位学习》范磊——第六章
[2]《C++程序设计教程(第二版)》钱能——第八章
[3] 百度搜索关键字:类、类的三大特性、类与结构体的区别

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值