c++类与对象

这篇具有很好参考价值的文章主要介绍了c++类与对象。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🐶博主主页:@ᰔᩚ. 一怀明月ꦿ 

❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章

🔥座右铭:“不要等到什么都没有了,才下定决心去做”

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀 

目录

🐰类与对象

🌸类和对象的关系:

🌸类的声明和对象的定义

🏡类的声明:

🏡对象的定义

🐰类的成员函数

🐰对象成员的访问

🐰构造函数和析构函数

🌸构造函数:

🏡构造函数的概念:

🏡构造函数的特性:

🏡构造函数的初始化列表


 文章来源地址https://www.toymoban.com/news/detail-401862.html

🐰类与对象

 
对象:对象就是封装了数据及在这些数据之上的操作的封装体,这个封装体有一个名字标识它,而且向外界提供一组操作
类:类是对具有相同属性和操作的一组对象的抽象描述
 

🌸类和对象的关系:

每一个实体都是对象。有一些对象是具有相同的结构和特性的。每个对象都属于一个特定的类型。在C++中对象的类型称为类(class )。类代表了某一批对象的共性和特征。类是对象的抽象,而对象是类的具体实例(instance)。
正如同结构体类型和结构体变量的关系一样,人们先声明一个结构体类型,然后用它去定义结构体变量。同一个结构体类型可以定义出多个不同的结构体变量。
在C然后++中也是先声明一个类类型,用它去定义若干个同类型的对象。对象就是类类型的一个变量。可以说类是对象的模板,是用来定义对象的一种抽象类型 。类是抽象的,不占用内存,而对象是具体的,占用存储空间。

c++类与对象

 

 

🌸类的声明和对象的定义

 

🏡类的声明:

类声明的一般形式:
class 类名
{
public:
    公用成员
    ...
protected:
    受保护成员
    ...
private:
    私有成员
    ...
};
在声明类的一般形式中,class 是声明类的关键字,后面跟着类名。大括号里是类的成员的声明,包括数据成员和成员函数。大括号后面要有分号。
成员的可访问性分为3类:
公用的(public)
受保护的(protected) 
私有的(private)
其中关键宇 public protected 和 private 称为成员访问限定符,后面加上冒号。 访问限定符限定它后面的成员的访问属性,直到出现下一个访问限定符或者类声明结束。
访问属性为公用的成员既可以被本类的成员函数访问,也可以在类的作用域内被其他函数访问。
访问属性为受保护的成员可以被本类区及其派生类的成员函数访问,但不能被类外访问。
访问属性为私有的成员只能被本类成员函数访问而不能被类外访问(类的友元例外)
 
 
在声明类时,这3种访问属性的成员的声明次序是任意的,并且在一个类的声明中这3种访问属性不一定全部都出现,可能只出现两种或一种。
某个成员访问限定符在一个类的声明中也可以出现多次。无论出现几次,成员的访问属性都是从一个成员访问限定符出现开始,到另一个成员访问限定符或类声明为止。如果在类声明的开始处没有写出成员访问限定符,则默认的成员访问属性是私有的。(尽量保证每一种成员访问限定符在类的声明中只出现一次)
 
关于3种成员访问限定符出现的顺序问题,从语法上说无论谁在前谁在后效果都是完全一样的。
 

🏡对象的定义

C++使用类来定义对象大体有三种方法:
 
第一种:先声明类类型,然后再定义对象
class student
{
public:
    公用成员
    ...
protected:
    受保护成员
    ...
private:
    私有成员
    ...
};
student stud1, stud2;   //定义了两个student类的对象stud1和stud2

在C++中,在声明了类类型后,定义对象有两种形式。

(1) class 类名 对象名

class student stud1, stud2;


(2) 类名 对象名

student stud1, stud2;
(1)和(2)这两种形式完全等效,但是(1)形式更加简洁,使用最多
第二种: 在声明类类型的同时定义对象(在定义class类的时候,在定义类的末尾,定义类对象)
class student
{
public:
    公用成员
    ...
protected:
    受保护成员
    ...
private:
    私有成员
    ...
}; stud1, stud2; //定义了两个student类的对象stud1和stud2
第三种:不出现类名,直接定义对象(在定义类的时候,在class关键字后面,没有定义类名)
class
{
public:
    公用成员
    ...
protected:
    受保护成员
    ...
private:
    私有成员
    ...
}; stud1, stud2; //定义了两个类的对象stud1和stud2

第二种和第三种对象定义的方法不常用

特别注意:声明类时系统并不会分配内存空间,而定义对象时系统会给每个对象分配内存空间
 

🐰类的成员函数

返回值类型 类名::成员函数名(参数表)
{
      函数体 
 }
 
它与普通函数区别于:成员函数是属于某个类的,是类的一个成员。可以指定函数的访问权限(公有,私有,受保护)。在类外调用成员函数要注意它的访问属性, 公有的成员函数才可以被类外任意的调用,私有的成员函数在类外是看不到的成员函数可以访问本类的任何成员,不管它的访问属性,可以访问本类的数据成员,也可以调用本类的其他成员函数。
 
成员函数的第一种定义方式:在类声明中只给出成员函数的原型,而将成员函数的定义放在类的外部。
#include<iostream>
using namespace std;
class Point{
 public:
     void Info();
     void Add();
 private:
     int x,y;
};
void Point::Info()   //在类外定义成员函数setpoint
{
    cin>>x>>y;
}
void Point::Add()
{
    cout<<x+y<<endl;
}
int main()
{
    Point s;
    s.Info();
    s.Add();
    retuen 0;
}
成员函数的第二种定义方式:将成员函数直接定义在类的内部
#include<iostream>
using namespace std;
class Point{
 public:
     void Info()
    {
         cin>>x>>y;
     }
     void Add()
    {
         cout<<x+y<<endl;
     }
 private:
     int x,y;
};
int main()
{
    Point s;
    s.Info();
    s.Add();
    return 0;
}
注意:
(1) 成员函数在类内定义或是在类外定义,对程序执行的效果基本一样。只是对于较长的成员函数放在类外更有利于程序的阅读。
(2)在类外定义成员函数时,必须首先在类内写出成员函数的原型声明,然后再在类外定义,这就要求类的声明必须在成员函数定义之前
(3) 如果在类外有函数定义,但是在函数名前没有类名和作用域运算符进行限定,则该函数被认为是普通函数
(4) 如果成员函数的函数体很短,如只有两三行,也可以将其定义在类内
 
在类中的成员函数是在类内定义时,C++系统会默认该成员函数是inline成员函数,此时不必在函数定义前面加inline,如果加上也是可以的。如果成员函数定义在类外,类内只有成员函数的声明,则在成员函数的声明或成员函数定义前必须要有inline,成员函数定义前和成员函数声明前只要有一处有inline即可。
 

🐰对象成员的访问

(1)通过对象名和成员操作符进行访问
 
    对象名.成员名
s.Info();

(2)通过指向对象的指针进行访问

#include<iostream>
using namespace std;
class Point{
 public:
     void Info()
    {
         cin>>x>>y;
     }
     void Add()
    {
         cout<<x+y<<endl;
     }
 private:
     int x,y;
};
int main()
{
    Point s;
    Point* ps=&s;
    ps->Info();
    ps->Add();
    return 0;
}
(3)通过对象的引用进行访问

 

#include<iostream>
using namespace std;
class Point{
 public:
     void Info()
    {
         cin>>x>>y;
     }
     void Add()
    {
         cout<<x+y<<endl;
     }
 private:
     int x,y;
};
int main()
{
    Point s;
    Point &ps=s;
    ps.Info();
    ps.Add();
    return 0;
}

🐰构造函数和析构函数

 

🌸构造函数:

🏡构造函数的概念:

构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只调用一次。
 

🏡构造函数的特性:

(1)构造函数与类的名相同,与其他函数不一样的是, 构造函数没有返回类型,在定义构造函数时在函数名前什么也不能加(加void也不可以);除此之外类似于其他的函数,构造函数也有一个(可能为空的)参数列表和一个(可能为空)函数体。
(2)构造函数可以被重载,一个类可以包含多个构造函数,不同的构造函数之间在形参数量或形参类型上有所不同。
(3)构造函数不需要用户调用,它是由系统在创建对象时自动调用的。因此,构造函数要声明为public访问属性的。
(4)构造函数不能声明为const的。
(5)构造函数的作用是在创建对象时对对象的数据成员进行初始化,一般在构造函数的函数体里写对其数据成员初始化的语句,但是也可以在其中加上和初始化无关的其他语句。
(6)C++系统在创建对象时必须执行一个构造函数,如果用户自己没有定义构造函数,编译器会隐式地提供一个构造函数,称为默认构造函数该构造函数的参数列表和函数体都为空
注意:编译器只有发现类不包含任何构造函数的情况下才会替我们生成一个默认的构造函数。一旦我们定义了一些其他的构造函数,如果定义的构造函数的参数列表为空或构造函数为全缺省函数则会是默认构造函数
注:默认的构造函数只能存在一个
 
构造函数体中不是初始化而是赋值
 

🏡构造函数的初始化列表

构造函数的执行分为两个阶段:
(1)初始化阶段(初始化)
初始化阶段具体指的是用构造函数初始化列表的方式来初始化类中的数据成员。没有在构造函数的初始值列表中显式地初始化的成员,则该成员将在构造函数体之前执行默认初始化。
(2)普通计算阶段(赋值)
执行构造函数的函数体,函数体内一般是对类的数据成员进行赋值的操作
SalesData(const string &No,int n,double price):bookNo(No),unitsSold(n),revenue(n*price)
{
    
}

SalesData(const string &No,int n,double price)
{
    bookNo=No;
    unitsSold=n;
    revenue=n*price;
}

 

这两个构造函数执行完成后的效果是一样的,数据成员的值是相同的。区别在于上面的代码初始化了它的数据成员,而下面这个是对数据成员执行了赋值。
 

    🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸  

 

到了这里,关于c++类与对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++:类与对象

    类是对一组具有共同属性特征和行为特征的对象的抽象,它可将相关数据和这些数据的操作(函数)组合在一起。 类定义格式: 类名 : class是声明类的,类名是标识符,且在其作用域内必须是唯一的。 注:C++规定,标识符以字母(大小写均可,但区分大小写)或下划

    2024年02月12日
    浏览(44)
  • [C++] 类与对象(上)

      目录 1、前言 2、类的引入 3、类的定义 3.1 类的两种定义方式 4、类的访问限定符 5、类的作用域 6、类的实例化 7、类对象模型 7.1 内存对齐规则 7.1 类对象的存储方式 8、this指针 8.1 this指针的特性 8.2 this指针是否可以为空 C语言是 面向过程 的, 关注 的是 过程 ,分析出求解

    2024年02月15日
    浏览(37)
  • C++类与对象(下)

    创建对象时,编译器会调用构造函数给对象中的成员变量一个合适的初始值。 虽然上述构造函数调用时,每个成员变量都有一个初始值了,但是这并不能称为类对象成员的初始化, 构造函数体中的语句只能称为赋初值 ,而不能称为初始化,因为 初始化只能初始一次,而构造

    2024年02月11日
    浏览(39)
  • C++ 类与对象(上)

    目录 本节目标  1.面向过程和面向对象初步认识  2.类的引入  3.类的定义 4.类的访问限定符及封装 4.1 访问限定符 4.2 封装 5. 类的作用域 6. 类的实例化  7.类对象模型 7.1 如何计算类对象的大小 7.2 类对象的存储方式猜测 7.3 结构体内存对齐规则  8.this指针 8.1 this指针的引出

    2024年02月19日
    浏览(42)
  • [C++]类与对象下篇

    目录 类与对象下篇::                             1.再谈构造函数                             2.static成员                             3.友元                             4.内部类                             5.匿名对象                             6.拷贝

    2023年04月25日
    浏览(43)
  • C++ 类与对象(下)

    目录 1. 再谈构造函数 1.1 构造函数体赋值  1.2 初始化列表  1.3 explicit  2. static成员 2.1 概念 2.2 特性  3.友元 3.1友元函数   3.2 友元类 4. 内部类 5.匿名对象  6.拷贝对象时的一些编译器优化  7. 再次理解类和对象 1. 再谈构造函数 2. Static成员 3. 友元 4. 内部类 5.匿名对象

    2024年02月19日
    浏览(39)
  • 【C++】——类与对象(下)

    本文是C++类与对象部分最后一篇文章,类与对象的重点是类与对象(中),本文主要是补充类与对象的剩余知识点及收尾。 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。 构造函数体中的语句只能将其称为赋初值,而不能称作初始化。

    2024年02月06日
    浏览(32)
  • 【C++】类与对象(中)

    目录 1. 类的6个默认成员函数 2. 构造函数 2.1 概念 2.2 特性 3. 析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 5. 赋值运算符重载 5.1 运算符重载 5.2 赋值运算符重载 5.3 前置++和后置++重载 6. const成员 7. 取地址及const取地址操作符重载 如果一个类中什么成员都没有,

    2024年02月05日
    浏览(46)
  • 【C++】类与对象(下)

      若想了解什么是类、封装的意义可以移步  【C++】类与对象(引入)   若对六大成员函数或const成员函数有疑问的这篇文章可能可以帮到你  【C++】类与对象(上) 目录 系列文章 前言 1.初始化列表 1.1概念 1.2特性  1.2.1必须使用初始化列表的情况 1.2.2初始化的顺序 2.expli

    2023年04月14日
    浏览(34)
  • c++类与对象详解

    在C++中,对象是类的实例。定义对象的语法为: 其中,class_name 是定义类时指定的类名,object_name 是对象的名称。 例如,在以下示例中,我们定义了一个名为 Rectangle 的类和两个对象 rect1 和 rect2: 这里我们创建了两个 Rectangle 类的对象:rect1 和 rect2。 在C++中,类可以通过以

    2024年02月13日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包