【小白学习C++ 教程】十一、C++类中访问修饰符
@Author:Runsen
类是面向对象编程。它是一种用户定义的数据类型,它拥有自己的数据成员和成员函数,可以通过创建该类的实例来访问和使用它们。
一个对象是一个类的实例。定义类时,不会分配内存,但在实例化(即创建对象)时会分配内存。
类是在 C++ 中使用关键字 class 后跟类名定义的。类的主体在大括号内定义,并以分号结尾。
语法:
ClassName ObjectName;
访问修饰符
类共有三种访问修饰符:public、private 和 protected。
- Public:在 public 说明符下声明的所有类成员将可供所有人使用。声明为 public 的数据成员和成员函数也可以被其他类和函数访问。可以从程序中的任何地方使用直接成员访问运算符 (.) 对该类的对象访问该类的公共成员。
#include<iostream>
using namespace std;// class definition
class Circle
{
public:double radius;double compute_area(){return 3.14 * radius * radius;}};// main function
int main()
{Circle obj;cout << "输入圆的半径:" << endl;cin >> obj.radius;cout << "Radius is: " << obj.radius << "\n";cout << "Area is: " << obj.compute_area();return 0;
}
在上面的程序中,数据成员radius被声明为 public,因此它可以在类外部访问,因此允许从 main()
内部访问。
- private :声明为私有的类成员只能被类内部的成员函数访问。它们不允许被类外的任何对象或函数直接访问。只有成员函数或友元函数才能访问类的私有数据成员。
#include<iostream>
using namespace std;class Circle
{// private data member
private:double radius;// public member function
public:double compute_area(){ return 3.14 * radius * radius;}
};
// main function
int main()
{// creating object of the classCircle obj;// trying to access private data member// directly outside the classobj.radius = 1.5;cout << "Area is:" << obj.compute_area();return 0;
}
报错如下:
在函数“int main()”中:
11:16:错误:'double Circle::radius' 是私有的双半径;^
31:9:错误:在此上下文中obj.radius = 1.5;^
上述程序的输出是编译时错误,因为我们不允许直接在类外访问类的私有数据成员。然而尝试访问 obj.radius
,radius 是一个私有数据成员,我们得到一个编译错误。
但是,我们可以使用类的公共成员函数间接访问类的私有数据成员。
#include<iostream>
using namespace std;class Circle
{ // private data memberprivate:double radius;// public member function public: void compute_area(double r){ // member function can access private// data member radiusradius = r;double area = 3.14*radius*radius;cout << "Radius is: " << radius << endl;cout << "Area is: " << area;}};// main function
int main()
{ Circle obj;obj.compute_area(1.5);return 0;
}
- Protected:Protected 访问修饰符类似于私有访问修饰符,除非借助友元类,否则不能在其类之外访问,不同之处在于声明为 Protected 的类成员可以被任何人访问该类的子类(派生类)也是如此。
注意:这种通过继承的访问可以根据继承的模式改变派生类中基类元素的访问修饰符。
#include <iostream>
using namespace std;// base class
class Parent
{
protected:int id_protected;};class Child : public Parent
{
public:void setId(int id){id_protected = id;}void displayId(){cout << "id_protected is: " << id_protected << endl;}
};// main function
int main() {Child obj1;obj1.setId(81);obj1.displayId();return 0;
}id_protected 是:81
成员函数
定义成员函数有两种方式:
- 内部类定义
- 外部类定义
要在类定义之外定义成员函数,我们必须使用作用域解析:: 运算符
以及类名和函数名。
#include <iostream>
using namespace std;
class Geeks
{public:string geekname;int id;void printname();void printid(){cout << "Geek id is: " << id;}
};void Geeks::printname()
{cout << "Geekname is: " << geekname;
}int main() {Geeks obj1;obj1.geekname = "Runsen";obj1.id=22;// call printname()obj1.printname();cout << endl;// call printid()obj1.printid();return 0;
}
【小白学习C++ 教程】十一、C++类中访问修饰符相关推荐
- 第四回 基类中的修饰符,应该根据你对架构的理解去定义它们,没有绝对的
基类中的修饰符,其实就是C#里的那几种修饰符,public ,proteced,internal,privat这四种基础类型,当然也还一个组合类型internal protected,它们都是C#里最 ...
- C#中什么是类,类和对象的关系,类的访问修饰符?
类以及类和对象的关系以及类的访问修饰符 一.类的概念: 二.类和对象的关系: 三.类的组成: 四.类的创建: 五.类的访问修饰符: 一.类的概念: 类是对于某一类对象的一个统称,类是对象的抽象化,对象 ...
- java中访问修饰符_Java中的非访问修饰符是什么?
java中访问修饰符 Java非访问修饰符 (Java non access modifiers) We have 7 non-access modifiers in Java. The name o ...
- java中访问修饰符_Java中的访问修饰符介绍
java中访问修饰符 什么是访问修饰符? (What are Access Modifiers?) Have you ever wanted to define how people would ac ...
- typescript的类class 和 类的访问修饰符
类的基本使用 class person {name:stringage:numberconstructor(name:string,age:number){//构造函数this.name = &quo ...
- JAVA类成员访问修饰符
JAVA类成员访问修饰符public,private,protected,默认时的区别 修饰符 当前类 同包 子类 其它包 public √ √ √ √ protected √ √ √ × defau ...
- Scala基础教程(三):访问修饰符、运算符
包,类或对象的成员可以标记访问修饰符private和protected,如果我们不使用这两种关键字,那么访问将被默认设置为public.这些修饰 限制为成员的代码的某些区域访问.要使用访问修饰符,包括 ...
- java 终态类,javaoo,继承,抽象类,终态类,访问修饰符!
java的继承!Java的继承使用extends关键字!为什么要使用继承呢?我们先来举例说明一下!比如说!烟是类!而叶子烟,和纸烟,烟这个类包含了,叶子烟和纸烟这两个类,如果我们要实现出叶子烟里面的一 ...
- 在php中默认访问权限修饰符是,php中访问修饰符的知识点总结
为什么需要访问权限? 防止覆盖变量名称和函数名称 我们下来看一下public的使用,public是可以从任何地方访问的最广泛的访问限定符. 假设A先生开发overlapFuncBase,B先生继承ov ...
最新文章
- 使用ML.NET + Azure DevOps + Azure Container Instances打造机器学习生产化
- Arduino笔记-Rouch Sensor的使用
- CButton相关函数介绍
- lsof 命令实用用法介绍
- 关于 Java 9 你所需要知道的一切
- allwinner h3 通用DMA 驱动(SylixOS 操作系统)
- 隔年增长的题_行测技巧:资料分析中隔年增长的解题关键
- 推荐5个在线免费好用的PDF转换器
- windows的mysql无密码登录,windows mysql 跳过登录密码重置
- C语言数组——一维数组实例详解
- java opencv 图片读取,边缘化,写出图片操作
- [分享]SQl语句学习专题
- ios 高德获取定位_概述-iOS 定位SDK | 高德地图API
- 9.11云和恩墨笔试
- 微信图片翻译技术优化之路
- 【FXCG】传奇人物保罗•都铎•琼斯(二)
- 【苹果相册】苹果推从新建的私钥CSR文件Profile还分为开发和分发
- 初识数据结构——“数据结构与算法”
- Centos下使用C++操作Redis——hiredis
- Multimedia Standards Introduction——专业术语