日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

类对象定义 三

發(fā)布時間:2025/3/21 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 类对象定义 三 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

類對象定義(二)

淺拷貝

淺拷貝:拷貝后,兩個對象會共同指向一個地址,如果有一個對象更改了數(shù)據(jù),另一個對象也會受影響,刪除對象話,可能會導致釋放兩次

#include <iostream>using namespace std; //.h class student { public:student();student(string name);student(const student &stu);~student();string getName();int age; private:string m_name; };//cpp 這叫定義 student::student() {m_name="kitty";m_p=new int[5];cout<<"gou zao"<<endl; } string student::getName(){return m_name; } student::student(string name) {m_name=name; } //拷貝構(gòu)造函數(shù) (淺拷貝) student::student(const student &stu) { // 如果通過 student stu1=stu 這樣的方式創(chuàng)建度對象,會執(zhí)行拷貝構(gòu)造函數(shù)m_name=stu.m_name; //淺拷貝m_p=stu.m_p;//淺拷貝 將復制的對象的 指針拷貝給了 另一個對象, 現(xiàn)在兩個對象 共同指向了一個 地址cout<<"qian kaobei"<<endl; } student::~student() {delete []m_p; //這樣刪除的話,淺拷貝會出問題cout<<"xi gou"<<endl; } void student::printAddr() {cout<<"dizhi:"<<*m_p<<endl; } void test(student s){} int main() {student s;student s1(s);s.printAddr();s1.printAddr();return 0; } 復制代碼

深拷貝

#include <iostream> #include <cstdlib>using namespace std; //.h class student { public:student();student(string name);student(const student &stu);~student();string getName();void printAddr(); private:int count;string m_name;int *m_p; };//cpp 這叫定義 student::student() {m_name="kitty";count=5;m_p=new int[count]; //初始化數(shù)組for (int i = 0; i < 5; i++) {//數(shù)組賦值m_p[i]=i;cout<<"value:"<<m_p[i]<<endl;}cout<<"gou zao"<<endl; } string student::getName(){return m_name; } student::student(string name) {m_name=name; } //拷貝構(gòu)造函數(shù) (深拷貝) student::student(const student &stu) {count=stu.count;//深拷貝 重新開辟一塊內(nèi)存空間m_p=new int [count];for (int i = 0; i <count; i++){m_p[i]=stu.m_p[i];}cout<<"shen kaobei"<<endl; } student::~student() {delete []m_p;cout<<"xi gou"<<endl; } void student::printAddr() {cout<<"dizhi:"<<m_p<<endl; }void test(student s){} int main() {student s;student s1(s);s.printAddr();s1.printAddr();return 0; }復制代碼

對象指針

int main() {student *s=new student();s->printAddr();student *s1=new student();(*s1).printAddr();return 0; } 復制代碼

對象成員指針

對象成員指針 類似JAVA中的 對象屬性

例如:private Bean bean;

指針類型大小為:4

#include <iostream> #include <cstdlib>using namespace std;class Teacher { public:Teacher(string name, int age);~Teacher();string getName();int getAge();private:string m_Name;int m_Age; };//.h class Student { public:Student(string nameA, int ageA, string nameB , int ageB);~Student();void printInfo();private:Teacher *m_teacherA;Teacher *m_teacherB; };Teacher::Teacher(string name, int age) {m_Name = name;m_Age = age;cout << "Teacher gou zao name: " << m_Name << " age: " << m_Age << endl; }Teacher::~Teacher() {cout << "Teacher xi gou name: " << m_Name << " age: " << m_Age << endl; }int Teacher::getAge() {return m_Age; }string Teacher::getName() {return m_Name; }//cpp 這叫定義 Student::Student(string nameA, int ageA, string nameB , int ageB) {m_teacherA=new Teacher(nameA,ageA);m_teacherB=new Teacher(nameB,ageB);cout << "Student gou zao" << endl; }Student::~Student() {delete m_teacherA;delete m_teacherB;cout << "Student xi gou" << endl; } void Student::printInfo() {cout << "printInfo" << endl;cout << "( A: " <<m_teacherA->getName()<<","<<m_teacherA->getAge()<<")"<< endl;cout << "( B: " <<m_teacherB->getName()<<","<<m_teacherB->getAge()<<")"<< endl; }int main() {Student *s=new Student("kitty",20,"tony",22);(*s).printInfo();cout<< sizeof(s)<<endl;cout<< sizeof(Student)<<endl;delete s;return 0; }復制代碼輸出結(jié)果: Teacher gou zao name: kitty age: 20 Teacher gou zao name: tony age: 22 Student gou zao printInfo ( A: kitty,20) ( B: tony,22) 4 8 Teacher xi gou name: kitty age: 20 Teacher xi gou name: tony age: 22 Student xi gou 復制代碼

this 指針

和JAVA中的this指針差不多一個意思

總結(jié)

以上是生活随笔為你收集整理的类对象定义 三的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。