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

Posted 刘润森!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小白学习C++ 教程十一C++类中访问修饰符相关的知识,希望对你有一定的参考价值。

@Author:Runsen

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

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

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

语法:

ClassName ObjectName;

访问修饰符

类共有三种访问修饰符: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;
}

在上面的程序中,数据成员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;
}

报错如下:

 在函数“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 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. 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++ 教程二十一C++ 中的STL容器Arrays和vector

Java学习(二十一)

C ++子类访问修饰符?

《挑战30天C++入门极限》入门教程:C++中的const限定修饰符

c++类不声明访问修饰符 默认是啥

在 C++ 中的多个类中使用模板类