小言_互联网的博客

C++语法

778人阅读  评论(0)

C++远程之封装篇(上)

访问限定符publicprivateprotected

对象时具体的事物,类是从对象上抽取出的抽象的描述。

1、对象的实例化

#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;

class Student{
    public:
        string getName();
        void setName();
    private:
        string m_strName;
}


1、从栈中实例化对象(有系统管理自动分配)
    Student stu;
    stu.setName("Open Course");
    cout<< stu.getName() << endl;

2、从堆中实例化对象(new):
    Student *P = new Student();
    if(p == NULL){
        //有可能存在申请不成功
        return 0;
    }
    p -> setName("Open Course");
    cout<< p-> getName() << endl;
    delete p;//回收对象
    p = NULL;

 2、string

c语言中没有string的概念,使用一系列的strxx来操作字符,c++中提供了# include<string>来操作字符串,可以直接进行Java的方式操作字符串,但是c++中 string str = "xx1" + "xx2" 这种方式是错误的

getLine(cin,name);将控制台输入的字符串输入到name中

name.enmpty();判断字符串是否是“”

3、数据的封装

#include <iostream>
#include <string>
using namespace std;

/**
  * 定义类:Student
  * 数据成员:m_strName
  * 数据成员的封装函数:setName()、getName()
  */
class Student
{
public:
    // 定义数据成员封装函数setName()
    void setName(string name){
        m_strName = name;   
    }
    
    // 定义数据成员封装函数getName()
    string getName(){
        return m_strName;
    }
    
//定义Student类私有数据成员m_strName
private:
    string m_strName;
};

int main()
{
    // 使用new关键字,实例化对象
	Student *str = new Student();
	if(str == NULL)
	    return 0;
    // 设置对象的数据成员
	str->setName("慕课网");
    // 使用cout打印对象str的数据成员
    cout << str->getName() << endl;
    
    // 将对象str的内存释放,并将其置空
	delete str;
	str = NULL;
	return 0;
}

4、类内定义与内联函数(inline)

内联函数

 

类内定义函数体在类内部类内定义的函数优先编译为内联函数

函数体在类内部定义

 

类外定义同文件类外定义分文件类外定义

同文件类外定义

 

分文件类外定义-(**)

 

5、C++中内存分区:

  • 栈区:默认分配到栈区,有系统控制
  • 堆区:new,有程序员控制
  • 全局区:静态变量、全局常量
  • 常量区:存储字符串、和一些常量
  • 代码区:存储编译之后的二进制代码

6、构造函数:

初始化列表优先于构造函数运行,并且只有用于构造函数,可以同时初始化多个成员,用“,”分割。

7、拷贝构造函数:  类名(const 类名&  变量名stu)

1、如果没有自定义的拷贝构造函数则系统自动会生成一个默认的拷贝构造函数

2、当采用直接初始化或复制初始化对象时系统自动调用拷贝构造函数。

3、不能重载,格式固定

8、析构函数: ~类名()

1、如果没有自定义的析构函数则系统自动会生成

2、析构函数在对象销毁时自动调用

3、不能重载,格式固定

综合练习:
#include <iostream>
#include <string>
using namespace std;
/**
 * 定义类:Student
 * 数据成员:m_strName
 * 无参构造函数:Student()
 * 有参构造函数:Student(string _name)
 * 拷贝构造函数:Student(const Student& stu)
 * 析构函数:~Student()
 * 数据成员函数:setName(string _name)、getName()
 */
 class Student{
     
     public:
        //无参数构造函数
        Student(){
            
        }
        //有参构造函数
        Student(string _name){
            m_strName = _name;
        }
        //拷贝构造函数
        Student(const Student& stu){
            
        }
        //析构函数
        ~Student(){
            
        }
        void setName(string _name){
            m_strName = _name;
        }
        string getName(){
            return m_strName;
        }
     private:
        string m_strName;
 };


int main(void)
{
    // 通过new方式实例化对象*stu
    Student *stu = new Student();
    if(stu == NULL) return 0;
    // 更改对象的数据成员为“慕课网”
	stu->setName("慕课网");
    // 打印对象的数据成员
    cout << stu->getName() << endl;
	delete stu;
	stu = NULL;
	return 0;
}

 

C++远程之封装片(下)

1、对象数组

 

 

 

 

 

 


转载:https://blog.csdn.net/u012278347/article/details/102482212
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场