首页 > 编程语言 >C++ 的类&对象

C++ 的类&对象

时间:2022-10-16 23:47:53浏览次数:60  
标签:对象 成员 private 访问 protected C++ baseClass public

C++在C语言的基础上增加了面对对象的编程,C++支持面向对象程序设计;

类是C++的核心特性,用于指定对象的形式,类中的数据和方法称为类的成员。

1. C++类的定义

类定义是以关键字class开头,后跟类的名称,类的主体在花括号里

2. 类成员的访问

数据封装是面向对象编程的一个重要特点,它防止函数直接访问类的内部成员,类的访问修饰符有public、private、protected三种,

一个类可以有多个相同的类访问修饰符,成员和类的默认访问修饰符为private

class  classname{
     public:
     // 公有成员  
     
     protected:
     // 受保护成员
     
     private:
     // 私有成员
     
};
  • 公有成员public:在类的外部可以直接访问,不需要使用任何成员函数来设置或者获取共有变量的值
  • 私有成员pravite:私有成员变量或函数在类的外部是不可访问的,甚至不可查看,只有类本身和友元函数可以访问私有成员
  • 受保护成员protected:受保护成员变量或函数与私有成员相似,但受保护成员在子类中是可以访问的
#include<iostream>
using spacename std;

class baseClass {
// 公有成员
public:
     string pub = "public";
     char getc();

// 私有成员,只能通过类内的函数进行访问
private:
     string pri = "private";

// 受保护成员,在子类中可以访问
protected:
     string pro = "protected";
};

// 继承base类的子类,继承用 :
class sonClass : baseClass {
public:
     char getPro();     // 先声明,再在外部定义,比较规范
};

char baseClass :: getc() {
     return getPro[3];
}

char sonClass :: getPro() {
     return pri[3];
}

int main(){
     baseClass bc;
     sonClass sc;
     cout << bc.pub << endl;     // 输出为 public   
     cout << bc.getc()<<endl;     // 输出为 v
     cout << sc.getPro();     // 输出为t
     return -1;
}

3. C++中类的继承

有public、protected、private三种继承方式,不同在于改变了基类成员的访问属性

  • public继承:基类中的public、protected、private成员访问属性在派生类别中分别变成public、protected、private
  • protected继承:基类中的public、protected、private成员访问属性在派生类别中分别变成protected、protected、private
  • private继承:基类中的public、protected、private成员访问属性在派生类别中分别变成private、private、private

C++中类的继承默认为private继承,struct中默认为public继承

4. 类的构造函数 & 析构函数

构造函数是类的一种特殊的成员函数,会在每次创建类的时候自动执行,其名称与类的名称完全相同,且不会返回任何类型,构造函数可以为某些成员变量进行初始值设置。

构造函数一般声明为公有的public,因为创建对象一般是在类的外部进行的;如果声明为private或protected,那么只能在类内部进行实例化,不是通常做法。

class baseClass{
public:
     baseClass(int aa, double bb);     // 构造函数的函数名与类的名称相同
     int geta();
private:
     int a;
     double b;  
}

// 构造函数无返回值,故不需要关键字 baseClass::baseClass(int aa, double bb){ a = aa; b = bb; } int baseClass::geta(){ return a; } int main(){ baseClass myclass(1, 2.2); cout << myclass.geta(); // 返回的是1 return 0; }

还可以使用初始化列表来初始化字段

baseClass::baseClass(int aa, double bb): a(aa), b(bb)
{
     ....
}

// 上述方法等同于
baseClass::baseClass(int aa, double bb)
{
     a = aa;
     b = bb;
}

析构函数是类的一种特殊成员函数,会在每次删除所创建的对象时执行;

析构函数的名称为 ~ + 类的名称,不会返回任何值,也不带任何参数,析构函数有助于在跳出程序(关闭文件、释放内存等)前释放资源。

  

标签:对象,成员,private,访问,protected,C++,baseClass,public
From: https://www.cnblogs.com/Liang-ml/p/16795836.html

相关文章

  • PreparedStatement对象
    PreparedStatement可以防止SQL注入。效率更高!1、新增packagecom.hua.lesson03;importcom.hua.lesson02.utils.JdbcUtils;importjava.sql.Connection;importjav......
  • 实验二 类与对象(2)
    任务4:Complex.hpp1#pragmaonce2#include<bits/stdc++.h>3usingnamespacestd;4classComplex{5public:6Complex(doubler=0,doubl......
  • ROS2基本命令与简单列子(python与C++)
    初次学习ROS2机器操作系统,本博客将简单入门记录于此。 一. ros2安装:sudoapt-getinstallcurl&&curl http://fishros.com/tools/install/ros-foxy|bash二.编......
  • 65、记录使用科大讯飞的声纹识别从官方的Python Demo转C++ Demo路程
    基本思想:需要将声纹识别的demo集成到项目中,奈何官方只提供了py版本和java版本,需要c++版本,逐开发和记录一下,只是简单复现其py代码一、官方代码的和手册的地址 这里将py代码......
  • 内置函数,可迭代对象
    一、重要内置函数1.zip()将对不同列表中对应的元素打包成一个个元组,然后返回由这些元组组成的对象.  用list()转换后打印出结果,可以看到输出结果为一个列表,列表中的......
  • c++ container容器(string,vector,map,queue,stack等等)
    STL和c++标准库标准模板库STL部分包含在C++标准库中的软件库。c++标准库:即以std::开头,但是部分编译器厂商也会把STL的内容放在std::namespace里面由于​​一个常见的误解​......
  • C++实现链表反转
    #include"stdio.h"structListNode{intval;ListNode*next;ListNode(intx):val(x),next(NULL){}};classSolution{public:ListNode*Rev......
  • C++二叉树动画演示
    C++二叉树动画演示题目2:基于前序、中序、后序序列构造二叉树需求:1、任意输入前序+中序序列或者中序+后序序列,生成二叉树,请使用三叉链表,在构造链表的过程中同步更新每......
  • C++提高编程
    目录C++提高编程1模板1.1模板的概念1.2函数模板1.2.1函数模板语法1.2.2函数模板注意事项1.2.3函数模板案例1.2.4普通函数与函数模板的区别1.2.5普通函数与函数模板......
  • python新类似乎违背了广度优先的执行顺序, 对象自定义计数实例化的多少
    classTSSS():deff1(self):print('fromTSSS')classSSS(TSSS):deff1(self):print('fromSSS')classSS():deff1(self):......