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

@Author:Runsen

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

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

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

语法:

ClassName ObjectName;

访问修饰符

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

  1. Public:在 public 说明符下声明的所有类成员将可供所有人使用。声明为 public 的数据成员和成员函数也可以被其他类和函数访问。可以从程序中的任何地方使用直接成员访问运算符 (.) 对该类的对象访问该类的公共成员。
#include
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() 内部访问。

  1. private :声明为私有的类成员只能被类内部的成员函数访问。它们不允许被类外的任何对象或函数直接访问。只有成员函数或友元函数才能访问类的私有数据成员。
#include
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
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;
}
  1. Protected:Protected 访问修饰符类似于私有访问修饰符,除非借助友元类,否则不能在其类之外访问,不同之处在于声明为 Protected 的类成员可以被任何人访问该类的子类(派生类)也是如此。

注意:这种通过继承的访问可以根据继承的模式改变派生类中基类元素的访问修饰符。

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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部