做國外市場哪個網(wǎng)站好口碑營銷成功案例有哪些
1.封裝
(1)構(gòu)造函數(shù)不是必須在的
可以通過行為修改屬性
(2)private和protected區(qū)別在于繼承那里要學(xué)
(3)類默認(rèn)是私有,struct是共有
私有的好處:控制數(shù)據(jù)的有效性,意思是在外面給函數(shù)的方式寫,可以設(shè)置多少多少就不能寫那種
(4)cube例子不會的點
類內(nèi)寫:
bool equal2(cube& c2)
{if (h == c2.h && w == c2.w && l == c2.l)return true;return false;
}
類外寫:cout << cu.equal2(cu2);
(5)點和圓的關(guān)系
#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
class point
{int x, y;//點所在的位置
public:point(int x, int y){this->x = x; this->y = y;}int getx(){return x;}int gety(){return y;}
};
class circle
{//int o,r;//分別是圓心所在的位置和半徑,不行,得要二維數(shù)組int x, y, r;
public:circle(int x, int y, int r){this->r = r; this->x = x; this->y = y;}/*int geto()//一個坐標(biāo)一個坐標(biāo)訪問{//return o;不需要呀,因為你有構(gòu)造函數(shù)了,可是無法訪問呀?}*/int getx(){return x;}int gety(){return y;}int getr(){return r;}//把判斷變成成員函數(shù),傳進來x,yvoid relation(point& p){//先求出兩點之間的距離,開根號sqrt()int d = sqrt((p.getx() - x) * (p.getx() - x) + (p.gety() - y) * (p.gety() - y));if (d < r)cout << "點在圓內(nèi)" << endl;else if (d == r)cout << "點在圓上" << endl;else cout << "點在圓外" << endl;}
};int main()
{circle c(2, 5, 3);point p(4, 4);//求點和圓的位置關(guān)系//點在圓內(nèi)點在圓上點在員外//只需要將半徑和這倆點之間的關(guān)系比較即可c.relation(p);
}
全局函數(shù)yyds
#include<iostream>
#include<stdio.h>
#include<math.h>
//class point;
using namespace std;
class circle
{//int o,r;//分別是圓心所在的位置和半徑,不行,得要二維數(shù)組int x, y, r;
public://class point;circle(int x,int y, int r){this->r = r; this->x = x; this->y = y;}/*int geto()//一個坐標(biāo)一個坐標(biāo)訪問{//return o;不需要呀,因為你有構(gòu)造函數(shù)了,可是無法訪問呀?}*/int getx(){return x;}int gety(){return y;}int getr(){return r;}//把判斷變成成員函數(shù),傳進來x,y/*void relation(point& p){//先求出兩點之間的距離,開根號sqrt()int d = sqrt((p.getx() - x) * (p.getx() - x) + (p.gety() - y) * (p.gety() - y));if (d < r)cout << "點在圓內(nèi)" << endl;else if (d == r)cout << "點在圓上" << endl;else cout << "點在圓外"<<endl;}*/
};
class point
{int x,y;//點所在的位置
public:point(int x,int y){this->x = x; this->y = y;}int getx(){return x;}int gety(){return y;}
};
//全局函數(shù)還是好
void relation(circle c, point p)
{int d = sqrt((p.getx() - c.getx()) * (p.getx() - c.getx()) + (p.gety() - c.gety()) * (p.gety() - c.gety()));if (d < c.getr())cout << "點在圓內(nèi)" << endl;else if (d == c.getr())cout << "點在圓上" << endl;else cout << "點在圓外" << endl;
}
int main()
{circle c(2, 5, 3);point p(4, 4);//求點和圓的位置關(guān)系//點在圓內(nèi)點在圓上點在員外//只需要將半徑和這倆點之間的關(guān)系比較即可relation(c,p);
}
咋說呢,你要想用哪個類,你就把這個類寫到前面
可以把一個類型為某類的變量定義為另一個類的變量
圓心就是一個點,因此可以將園中的圓心定義為點的類型
(6)我就要把這個類放在不同文件里的知識單獨拎出來
把類的聲明放在頭文件中使用.h文件;類中文件的實現(xiàn)放在cpp中重新起一個cpp文件,這個文件要用聲明的頭文件;在main函數(shù)里面想要使用類,就在前面加上聲明的頭文件
分別如何書寫呢?
例如circle文件:
在頭文件里寫一個.h文件,然后把類復(fù)制進去,去掉函數(shù)實現(xiàn),留下成員變量和成員函數(shù)的聲明;
然后再源文件里另寫一個cpp文件,這個文件寫下來類內(nèi)各個函數(shù)的具體實現(xiàn)就好了
這下:函數(shù)的聲明函數(shù)的實現(xiàn)就都分得很清了
2.函數(shù)的初始化和銷毀
1.構(gòu)造函數(shù)和析構(gòu)函數(shù)都是只要創(chuàng)建了對象,這個函數(shù)就會被自動調(diào)用,就算你不寫,系統(tǒng)會自動給你寫一個空的構(gòu)造函數(shù)然后一調(diào)用,但是你要是寫了就用你的,即便你不調(diào)用這個函數(shù),他也會自動調(diào)用你寫的
2.你要是在函數(shù)體內(nèi)(不是main),那么就會放在棧上,這個函數(shù)用完就要析構(gòu)銷毀
main中,只有當(dāng)main執(zhí)行完了以后才能執(zhí)行析構(gòu)函數(shù)
3.匿名構(gòu)造?三種方法
拷貝構(gòu)造函數(shù)part:
#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
class person
{
public:int age;person(int age){this->age = age;}//拷貝構(gòu)造函數(shù) //因為你不能修改你傳入的p的屬性,因此要用靜態(tài)引用person(const person& p){//將傳入的人身上的所有屬性拷貝到我身上,我現(xiàn)在的age=傳入的p的ageage = p.age;cout << "輸出拷貝構(gòu)造函數(shù)" << endl;}};
int main()
{person p1(10);cout << p1.age << endl;person p2(p1);cout << p2.age << endl;//輸出也是10}
匿名構(gòu)造函數(shù)
person(10);//沒有給這個構(gòu)造函數(shù)一個對象名,就是匿名構(gòu)造函數(shù)//特點:當(dāng)前行執(zhí)行結(jié)束,就會被釋放,就會析構(gòu)函數(shù)Person(p3)//這是不對的//注意:不要利用拷貝函數(shù)初始化匿名對象-編譯器會認(rèn)為Person(p3) == Person p3 編譯器會認(rèn)為是對象的聲明
隱式轉(zhuǎn)換法的意思是你寫一個person p3=10;系統(tǒng)會自動給你轉(zhuǎn)換成顯式法
4.
//值傳遞的方式給函數(shù)參數(shù)傳值
//※拷貝構(gòu)造函數(shù)為什么可以值傳遞哪里體現(xiàn)了?都沒見拷貝構(gòu)造函數(shù);
解密時刻:!!!!!!!!!!!!!!!!!!!!!
因為當(dāng)你值傳遞的時候就會調(diào)用拷貝構(gòu)造函數(shù),值傳遞相當(dāng)于給了一個副本嘛
void dowork(Person p)
{}
void test02()
{Person p;dowork(p);
}
//值方式返回局部對象
//輸出那個是引用的解引用嗎?,局部對象是p1?拷貝構(gòu)造函數(shù)在哪?好吧,test03第一句就是p=p1;
//現(xiàn)在p有p2的所有屬性,因此出來的對象是誰呢?p1本身?也就是想用p來輸出p1,那為啥不直接輸出dowork2()呢?
解密:p和p1的不是一個了,地址都不一樣,相當(dāng)于值傳遞,返回一個p1,就拷貝了一個p1
Person dowork2()
{Person p1;cout << (int*)&p1 << endl;return p1;
}
void test03()
{Person p = dowork2();cout << (int*)&p << endl;
}
5.深拷貝和淺拷貝
//再復(fù)習(xí)一下new的代碼
int* p=new int(*p.height)//意思就是為p開辟一個空間,里面的內(nèi)容是int括號里的內(nèi)容,左邊要是一個指針,指向這段空間
如果你的成員變量在堆區(qū),那么就容易出現(xiàn)重復(fù)釋放空間的問題,因為淺拷貝就相當(dāng)于別人的值賦給你,同時你的位置也會和他一樣,那你倆運行完就都會釋放它就釋放了兩次,所以原因就在于你倆堆的位置在一塊呢,所以把他倆放兩個位置不就好了,用new開辟一個新空間
Person(const Person& p)
{cout << "Person的拷貝構(gòu)造函數(shù)調(diào)用" << endl;m_Age = p.m_Age;//m_Height = p.m_Height;編譯器默認(rèn)實現(xiàn)的就是這行代碼//深拷貝操作m_Height = new int(*p.m_Height);
}
6.當(dāng)其他類對象作為本類的類成員時,先構(gòu)造其他類,然后再構(gòu)造本類,
析構(gòu)的順序與構(gòu)造相反
3.友元
1.用途:private成員外面不能被訪問,但有時候你想讓外面某些特殊函數(shù)去訪問,就采用友元
2.三種:全局函數(shù);成員函數(shù);類;
(1)全局函數(shù):就是給類中前面加上函數(shù)的聲明,并且給函數(shù)聲明的前面加上friend
class friend
{friend void get();
}
(2)類:A想用B的,你就給A前面加上B的聲明
class A//A里用B了,所以要聲明friend
{friend class B;private:B b1;
}
class B
{}
你放在B里面,就是要給B說別人能訪問你
(3)成員函數(shù)
整明白了
就是你A類里一個函數(shù)想訪問另一個類B,你就要在B里聲明這個函數(shù)
不是想全局函數(shù)那樣直接前面加一個friend,而是要在函數(shù)名字前面加上所屬的類
例如下面
friend void GoodGay::visit();