【小白学习C++ 教程】十一、C++类中访问修饰符

举报
毛利 发表于 2021/07/30 22:19:27 2021/07/30
【摘要】 @Author:Runsen 类是面向对象编程。它是一种用户定义的数据类型,它拥有自己的数据成员和成员函数,可以通过创建该类的实例来访问和使用它们。 一个对象是一个类的实例。定义类时,不会分配内存,但在实例化(即创建对象)时会分配内存。 类是在 C++ 中使用关键字 class 后跟类名定义的。类的主体在大括号内定义,并以分号结尾。 语法: ClassNa...

@Author:Runsen

类是面向对象编程。它是一种用户定义的数据类型,它拥有自己的数据成员和成员函数,可以通过创建该类的实例来访问和使用它们。

一个对象是一个类的实例。定义类时,不会分配内存,但在实例化(即创建对象)时会分配内存。

类是在 C++ 中使用关键字 class 后跟类名定义的。类的主体在大括号内定义,并以分号结尾。

语法:

ClassName ObjectName;

  
 
  • 1

访问修饰符

类共有三种访问修饰符:public、private 和 protected。

  1. 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;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

在上面的程序中,数据成员radius被声明为 public,因此它可以在类外部访问,因此允许从 main() 内部访问。

  1. 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 class Circle obj; // trying to access private data member // directly outside the class obj.radius = 1.5; cout << "Area is:" << obj.compute_area(); return 0;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

报错如下:

 在函数“int main()”中:
11:16:错误:'double Circle::radius' 是私有的 双半径; ^
31:9:错误:在此上下文中 obj.radius = 1.5; ^

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

上述程序的输出是编译时错误,因为我们不允许直接在类外访问类的私有数据成员。然而尝试访问 obj.radius,radius 是一个私有数据成员,我们得到一个编译错误。

但是,我们可以使用类的公共成员函数间接访问类的私有数据成员。

#include<iostream>
using namespace std;
 
class Circle
{ // private data member private: double radius; // public member function public: void compute_area(double r) {   // member function can access private // data member radius radius = 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;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  1. 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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

成员函数

定义成员函数有两种方式:

  • 内部类定义
  • 外部类定义

要在类定义之外定义成员函数,我们必须使用作用域解析:: 运算符以及类名和函数名。

#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;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

文章来源: maoli.blog.csdn.net,作者:刘润森!,版权归原作者所有,如需转载,请联系作者。

原文链接:maoli.blog.csdn.net/article/details/119219835

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。